2

oauth2 ダンスのステップ 1 の後、リダイレクト URL でコードを取得できます。これはうまくいきます。しかしその後、

「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」を使用しています

他のものを使用する必要がありますか?なにか提案を ?

4

2 に答える 2

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);
                        }

リダイレクト URL には、必要なアクセス トークンが含まれています。

于 2012-09-29T08:18:23.857 に答える
1

認証フローのステップ 5またはoauth/token エンドポイントを参照してください。

grant_type が欠落しているようです。

于 2012-09-28T19:20:32.000 に答える