2017-06-09 6 views
5

からではありません。私は、GoogleのクライアントIDを追加したトークンは、私はGoogleの[ログイン]をクリックすると、私は以下のコードを使用onActivityResultメソッドでトークンを取得しています。このアイデンティティプールアマゾンモバイル・ハブのAndroidのサポートプロバイダ

GoogleSignInAccount account = result.getSignInAccount(); 
String token = account.getIdToken(); 

credentialsProvider = new CognitoCachingCredentialsProvider(
      Login.this, // Context 
      "My Pool ID", // Identity Pool ID 
      Regions.US_EAST_1 // Region 
    ); 

をフェデレーションIDの管理を使用してCognitoで IAM accounts.google.comのすべてのキーを十字でチェックしていますが、すべてが完璧と思われます。

final Map<String, String> logins = new HashMap<String, String>(); 
logins.put("accounts.google.com", account.getIdToken()); 

credentialsProvider.setLogins(logins); 
credentialsProvider.refresh(); 

私はエラーを取得しています以下のコードを使用してID IDを取得しよう - トークンは、このアイデンティティ・プールのサポートプロバイダからではありません。 何が間違いでしょうか?

+0

これらの質問は、関連するようだ:https://forums.aws.amazon.com/thread.jspa? threadID = 250632とhttps://forums.aws.amazon.com/thread.jspa?threadID=170238 –

+0

@LisaMShon残念なことに、これらのスレッドのどちらも正しいクレデンシャルを取得する古い方法について話しています。新しいシステム。 –

+0

IDは同じ地域から生成されるべきだと思います。 –

答えて

-1

正常に動作させるには、Google Provider App IDをCognitoでバックエンド設定に追加する必要があります。プールIDを持つCognito ConsoleまたはMobile Hub Consoleから行うことができます。

IAM provider list

末尾との1:

おかげで、私の場合は ロハン

2

は、私はこのように、accounts.google.comのための私のIAM IDプロバイダで最後のスラッシュを持っていましたスラッシュは間違っています。末尾にスラッシュのないものは正しく動作します。 AWSがそれらの両方に対して同じ拇印を取得するのは興味深いことです。

アカウント>プロバイダ> accounts.google.comのAWS IAMコンソールで、「com.example.yourstuffのAndroidクライアント(Googleサービスによって自動作成)」のキーをオーディエンスとして追加します。 「222222222222-x8x8x8x8x8x8x8x8x8x8x8x8x8x8x8x8x8x8x8x8.apps.googleusercontent.com」のように表示されます(デバッグするときは、残りのすべてのキーをオーディエンスエントリとして使用しますが、後で戻って削除できるものを特定できます。)

GoogleSignInOptions.Builderへの呼び出しでは、あなたはグールのAPI> APIマネージャ]> [資格情報ページでOAuath 2.0クライアントIDの下でWebアプリケーションキーを使用して#requestIdTokenへの呼び出しが必要になります。

GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) 
    .requestIdToken("999999whateverxxxx.apps.googleusercontent.com") 
    .build() 

(トークンキャッシュされる可能性があります。requestIdToken呼び出しでアプリケーションを実行した後、requestIdToken呼び出しを削除してもう一度実行すると、GoogleSignInAccouのgetIdToken()呼び出しから結果を得ることができますntオブジェクト)

Googleログインコードは、最終的にあなたにGoogleSignInAccountオブジェクトを与えます。あなたはIAMに記載されている右キーを持っていない場合

// pseudocode... 
    private fun fn(x: GoogleSignInAccount) { 
    val token = x.idToken // getIdToken if you're still using Java 
    val logins = HashMap<String, String>()  
    logins.put("accounts.google.com", token); 
    credentialsProvider.logins = logins 
    ... 

:あなたはログインハッシュに入れしようとしている文字列を(私の場合、それは83の文字です)を取得し、そのオブジェクトに#getIdTokenを呼び出し>プロバイダ> accounts.google.comの場合、NotAuthorizedException(Invalid login token. Incorrect token audience.)例外が発生します。

あなたは余分なスラッシュがaccounts.google.com/することを追加した場合、あなたがaccounts.googleを追加しようとすると、NotAuthorizedException(Token is not from a supported provider of this identity pool.)

を取得します。COM /このようなログインハッシュ(代わりIAMアイデンティティプロバイダ名を修正し、これを行わない)に:

logins.put("accounts.google.com/", token); 

あなたはNotAuthorizedException(Invalid login token. Issuer doesn't match providerName)例外を取得します。

間違ったトークンを使用すると、NotAuthorizedException (Invalid login token. Token signature invalid.)の例外が発生します。

(私は失敗し、他の多くの方法がある疑いがある;これらは私が見つけた一つだけの者です。)

関連する問題