服务器发送的响应无效,来自服务器的OAuth2“无效的授权”响应

在尝试获取Google OAuth2访问令牌时遇到invalid_grant错误。当首次通过授权代码获取access_token后,后续请求应使用refresh_token。Android开发者通常在HTTP POST请求中设置grant_type,如果已拥有access_token则使用refresh_token,否则使用authorization_code。代码示例展示了如何根据是否有access_token来设置请求参数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我被invalid_grant错误困扰了,而不是相同的代码让我正确的访问令牌有些事实。

谢赫的回答引导了我正确的方向。

所有我们试图从获得访问代码的第一:

用户被定向到“允许权限”屏幕,然后我们的应用程序获得访问代码。

使用我们尝试获得访问令牌从接入代码:

在第一次尝试将返回我们的access_token与grant_type = authorization_code,但一旦的access_token已经提供给我们,这不再指望收到grant_type =授权一遍,而是喜欢收到grant_type = refresh_token

同胞Android开发人员的代码如下:

String accessToken = null, refreshToken = null;

HttpPost httppost = new HttpPost(https://accounts.google.com/o/oauth2/token);

HttpParams myParams = new BasicHttpParams();

httppost.setHeader("Content-type", "application/x-www-form-urlencoded");

List nameValuePairs = new ArrayList(4);

nameValuePairs.add(new BasicNameValuePair("client_id", BLOGGER_CLIENT_ID));

SharedPreferences prefs = context.getSharedPreferences(PREFERENCES_NAME, Context.MODE_PRIVATE);

String bloggerAccessToken = prefs.getString(PREFERENCES_KEY_BLOGGER_ACCESS_TOKEN, null);

if(bloggerAccessToken != null && bloggerAccessToken.length() > 0){

nameValuePairs.add(new BasicNameValuePair("refresh_token", prefs.getString(PREFERENCES_KEY_BLOGGER_REFRESH_TOKEN, null)));

nameValuePairs.add(new BasicNameValuePair("grant_type", "refresh_token"));

} else{

nameValuePairs.add(new BasicNameValuePair("code", prefs.getString(PREFERENCES_KEY_BLOGGER_ACCESS_CODE, null)));

nameValuePairs.add(new BasicNameValuePair("grant_type", "authorization_code"));

nameValuePairs.add(new BasicNameValuePair("redirect_uri", "http://localhost"));

}

httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

HttpClient httpClient = new DefaultHttpClient(myParams);

response = httpClient.execute(httppost);

String returnedJsonStr = EntityUtils.toString(response.getEntity());

JSONObject jsonObject = new JSONObject(returnedJsonStr);

accessToken = jsonObject.getString("access_token");

if(jsonObject.has("refresh_token"))

refreshToken = jsonObject.getString("refresh_token");

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值