2017-04-09 23 views
0

Iグーグルhttps://developers.google.com/identity/sign-in/web/server-side-flowから次の例を使用し、これまで私は、次の手順を達成することができました:取得TokenResponseException:401権限

  1. ユーザーは、クライアント側での認証(ブラウザ)
  2. コードが戻されるのとサーバーのデータベースに保存されました
  3. 認証コードを要求するときTokenResponseException:401 Unauthorized。私は次のようにチェック

  1. APIがhttps://developers.google.com/oauthplayground
  2. を有効になっている私は、同じクライアントIDとクライアントシークレットとのアクセスをテストし、それが
  3. の作品は、ほとんどすべてだったSOクエリを読みますこの問題に関連していますが、本当に助けられた人はいませんでした。
  4. すべてのユーザーのアクセス許可を取り消し、新しいコードを取得するように依頼しました。以下は

は、私が使用していたコードです:私はsetRedirectUri使用didntの場合は、

public void getUserAuthTokens(String authCode){ 
    try { 

     GoogleClientSecrets clientSecrets = GoogleClientSecrets.load(
       JacksonFactory.getDefaultInstance(),new FileReader(new ClassPathResource("static\\client_secret.json").getFile())); 

     List<String> scopes = new ArrayList<>(); 
     scopes.add("https://www.googleapis.com/auth/gmail.readonly"); 
     //String scopes[]={"https://www.googleapis.com/auth/gmail.readonly"}; 

     Collection<String> SCOPES 
       = Collections.unmodifiableCollection(
       Arrays.asList(
         new String[]{ 
           GmailScopes.GMAIL_READONLY 
         })); 
     GoogleTokenResponse tokenResponse = new GoogleAuthorizationCodeTokenRequest(new NetHttpTransport(),JacksonFactory.getDefaultInstance(), 
       "https://www.googleapis.com/oauth2/v4/token", 
       clientSecrets.getDetails().getClientId(), 
       clientSecrets.getDetails().getClientSecret(), 
       authCode).setRedirectUri(clientSecrets.getDetails().getRedirectUris().get(0)).setScopes(SCOPES).execute(); 


     String accessToken = tokenResponse.getAccessToken(); 
     System.out.print("Token is: "+accessToken); 
    }catch (IOException x){ 
     x.printStackTrace(); 

    } 

} 

サイドノートとして(。。)(clientSecrets.getDetailsをgetRedirectUris()(0)を取得)それから私は得ました私は、GoogleのAPIが返すStandard Error Responses、不正なエラーコード401から基づい

+0

私は本当にここでいくつかの援助が必要です私はこれをひっくり返すことができません – user2145673

答えて

0

多くのデバッグと検索を行った結果、問題の解決策が見つかったので、誰かが同じ問題に遭遇した場合に備えて、ここに投稿しています。ここで

は、私が使用するコードです:

GoogleTokenResponse tokenResponse = new GoogleAuthorizationCodeTokenRequest(new NetHttpTransport(),JacksonFactory.getDefaultInstance(), 
       "https://www.googleapis.com/oauth2/v4/token", 
       clientSecrets.getDetails().getClientId(), 
       clientSecrets.getDetails().getClientSecret(), 
       authCode, "postmessage") 
       .execute(); 

あなたが助けGoogle+ Sign-in for server-side apps, exchanging auth code for access token

希望@のpostMessageの詳細を読むことができます。

0

を使い果たしたとして、私は非常にこの上の任意のアイデアをいただければ幸いです

「不一致エラーをリダイレクトすると、」承認CREに問題があることを示して要求に提供されたデンマーク。考えられる理由を確認することができます:

  • OAuthアクセストークンは期限切れであり、更新する必要があります。これは早期にアクセストークンをリフレッシュすることで回避できますが、コードはこのエラーをキャッチしてトークンをリフレッシュして自動的に再試行することもできます。
  • 複数の一致しない認証が提供されました。 1つのモードのみを選択してください。
  • OAuthアクセストークンのバインドされたプロジェクトが、提供された開発者キーに関連付けられたプロジェクトと一致しません。
  • Authorizationヘッダーが認識できない形式であるか、サポートされていない資格情報の種類を使用しています。

Google APIにアクセスするためのOAuth 2.0の使用に関する詳細については、documentationを参照してください。この関連するSO postの推奨ソリューションも役立ちます。

+0

私はコードがGoogleにアクセストークンを取得するために送信され、それが失敗した段階でです。あなたは上記の関連するコードを見ることができます。エラーはcatchブロックで捕捉され、スタックトレースのエラーを見ることができます。それを引き起こす原因は何ですか? – user2145673

関連する問題