在oauth2舞蹈的第1步之后,我可以在重定向网址中检索代码。这很好用。但是,
我收到了'com.google.api.client.http.HttpResponseException:400 Bad Request'错误
尝试获取accessTokenResponse。知道为什么吗?
AuthorizationCodeGrant request = new AuthorizationCodeGrant(new NetHttpTransport(),
new JacksonFactory(),
OAuth2ClientCredentials.ACCESS_TOKEN_URL,
OAuth2ClientCredentials.CLIENT_ID,
OAuth2ClientCredentials.CLIENT_SECRET,
code,
OAuth2ClientCredentials.REDIRECT_URI);
try {
AccessTokenResponse accessTokenResponse = request.execute();
CredentialStore credentialStore = new SharedPreferencesCredentialStore(prefs);
credentialStore.write(accessTokenResponse );
} catch (IOException e) {
Log.e(TAG, "error= "+e);
e.printStackTrace();
}
这是触发错误的行:
AccessTokenResponse accessTokenResponse = request.execute();
我正在使用'com.google.api.client.auth.oauth2.draft10.AccessTokenRequest.AuthorizationCodeGrant'
我可以使用其他的吗?有什么建议吗?
答案 0 :(得分:1)
请参阅authorization flow或oauth/token end-point。
的第5步好像你错过了grant_type。
答案 1 :(得分:1)
这看起来有效:
// Create a new HttpClient and Post Header
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(OAuth2ClientCredentials.ACCESS_TOKEN_URL);
try {
// Add your data
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(5);
nameValuePairs.add(new BasicNameValuePair("client_id", OAuth2ClientCredentials.CLIENT_ID));
nameValuePairs.add(new BasicNameValuePair("client_secret", OAuth2ClientCredentials.CLIENT_SECRET));
nameValuePairs.add(new BasicNameValuePair("code", code));
nameValuePairs.add(new BasicNameValuePair("grant_type", OAuth2ClientCredentials.TOKEN_GRANT_TYPE));
nameValuePairs.add(new BasicNameValuePair("redirect_uri", OAuth2ClientCredentials.REDIRECT_URI));
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
Log.i(TAG, "httppost= "+inputStreamToString(httppost.getEntity().getContent()));
// Execute HTTP Post Request
HttpResponse response = httpclient.execute(httppost);
Log.i(TAG, "response= "+inputStreamToString(response.getEntity().getContent()));
} catch (ClientProtocolException e) {
Log.e(TAG, "error= "+e);
} catch (IOException e) {
Log.e(TAG, "error= "+e);
}
重定向网址包含我需要的访问令牌。