Stocktwits API - AuthorizationCodeGrant HttpResponseException:400 Bad Request

时间:2012-09-28 13:17:33

标签: android oauth-2.0 stocktwits

在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'

我可以使用其他的吗?有什么建议吗?

2 个答案:

答案 0 :(得分:1)

请参阅authorization flowoauth/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);
                        }

重定向网址包含我需要的访问令牌。