2016-10-25 21 views
-1

私は、ユーザプールとCognito IDを統合するために、http://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-integrating-user-pools-with-identity-pools.htmlのリンクに記載された手順に従います。しかし、私は、私は次のエラーを取得する認証プロバイダを使用してAMAZONEのS3にアクセスしようとしています毎回:Amazon Cognitoとユーザープールを認証プロバイダと統合する

E/CognitoCachingCredentialsProvider: Failure to get credentials com.amazonaws.services.cognitoidentity.model.NotAuthorizedException: Logins don't match. Please include at least one valid login for this identity or identity pool. (Service: AmazonCognitoIdentity; Status Code: 400; Error Code: NotAuthorizedException; Request ID: ff4da8ad-9a96-11e6-9c64-67a5c841c727) at com.amazonaws.http.AmazonHttpClient.handleErrorResponse(AmazonHttpClient.java:712) at com.amazonaws.http.AmazonHttpClient.executeHelper(AmazonHttpClient.java:388) at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:199) at com.amazonaws.services.cognitoidentity.AmazonCognitoIdentityClient.invoke(AmazonCognitoIdentityClient.java:558) at com.amazonaws.services.cognitoidentity.AmazonCognitoIdentityClient.getId(AmazonCognitoIdentityClient.java:444) at com.amazonaws.auth.AWSAbstractCognitoIdentityProvider.getIdentityId(AWSAbstractCognitoIdentityProvider.java:172) at com.amazonaws.auth.AWSEnhancedCognitoIdentityProvider.refresh(AWSEnhancedCognitoIdentityProvider.java:76) at com.amazonaws.auth.CognitoCredentialsProvider.startSession(CognitoCredentialsProvider.java:561) at com.amazonaws.auth.CognitoCredentialsProvider.getCredentials(CognitoCredentialsProvider.java:371) at com.amazonaws.auth.CognitoCachingCredentialsProvider.getCredentials(CognitoCachingCredentialsProvider.java:441) at com.amazonaws.auth.CognitoCachingCredentialsProvider.getCredentials(CognitoCachingCredentialsProvider.java:76) at com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:4369) at com.amazonaws.services.s3.AmazonS3Client.putObject(AmazonS3Client.java:1704) at com.amazonaws.mobileconnectors.s3.transferutility.UploadTask.uploadSinglePartAndWaitForCompletion(UploadTask.java:203) at com.amazonaws.mobileconnectors.s3.transferutility.UploadTask.call(UploadTask.java:85) at com.amazonaws.mobileconnectors.s3.transferutility.UploadTask.call(UploadTask.java:44) at java.util.concurrent.FutureTask.run(FutureTask.java:234) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573) at java.lang.Thread.run(Thread.java:864).

ここでは、コードは次のとおりです。

public static TransferUtility getTransferUtility(Context context) { 
     if (sTransferUtility == null) { 
      sTransferUtility = new TransferUtility(getS3Client(context.getApplicationContext()), 
        context.getApplicationContext()); 
     } 

     return sTransferUtility; 
    } 



public static AmazonS3Client getS3Client(Context context) { 
     if (sS3Client == null) { 
      sS3Client = new AmazonS3Client(getCredProvider(context.getApplicationContext())); 
     } 
     return sS3Client; 
    } 



private static CognitoCachingCredentialsProvider getCredProvider(Context context) { 
     if (sCredProvider == null) { 
      sCredProvider = new CognitoCachingCredentialsProvider(
        context.getApplicationContext(), 
        Constants.COGNITO_POOL_ID, 
        Regions.EU_WEST_1); 
      Map<String, String> logins = new HashMap<>(); 
      logins.put("cognito-idp.eu-west-1.amazonaws.com/eu-west-1_xxxxxxxxx", idToken); 
      sCredProvider.setLogins(logins); 
     } 
     return sCredProvider; 
    } 

ここで私はトークン

AuthenticationHandler authenticationHandler = new AuthenticationHandler() { 
     @Override 
     public void onSuccess(CognitoUserSession cognitoUserSession, CognitoDevice device) { 
      Log.e(TAG, "***Auth Success***"); 
      idToken = cognitoUserSession.getIdToken().getJWTToken(); 
      AppHelper.setCurrSession(cognitoUserSession); 
      AppHelper.newDevice(device); 
      closeWaitDialog(); 
      launchUser(); 
     } 
を取得する方法

転送能力はcom.amazonaws.mobileconnectors.s3.transferutilityパッケージの一部です。

ありがとうございました。 felini

+1

これは、無料のコードデバッグ用のプラットフォームではありません。 – frieder

+0

申し訳ありません私はデバッグを探していません。私は、ユーザープールをコグニティブアイデンティティに統合するために、amazoneのWebサイトに記載されている手順に従います。しかし、私はいつも信任状を得ることに失敗します。誰かがなぜそれが偉大になるのか教えていただけたら! – Felini500

+0

問題が解決しました! – Felini500

答えて

1

この問題は、構成やトークンを作成した方法(プロバイダ名の部分が正しいように見える)にある可能性があります。しかし、おそらくあなたはGetIdResultだけを必要とします。

"ログインが一致しません。このIDまたはIDプールに少なくとも1つの有効なログインを含めてください。"

これは、あるアイデンティティのidentityIdを持っていて、別のアイデンティティのためのログインを提供したときに起こる可能性があります。これは、「AWSCognitoIdentityService.GetCredentialsForIdentity」API要求から来ています(Javaでは、GetCredentialsForIdentityResultだと思います)。 IDを変更する場合は、「AWSCognitoIdentityService.GetId」を実行する必要があります(JavaではこれがGetIdResultだと思います)。

エラーは、アイデンティティプールまたはプールに関連付けられているアイデンティティプロバイダが見つかりませんでした(私はこれが別のエラーを生成するとは思うが確かではない)、またはログインIDトークンにidentityIdを関連付けることができなかった(IDトークンのユーザー名クレームがインスタンスID )。

あなたはログイン辞書を修正するか、GetIdResultコールを実行して、提供しているログインハッシュに正しいidentityIdがあることを確認する必要があると思います。

...設定されている場合は、認証プロバイダリストでCognitoユーザプール認証プロバイダとしてユーザプールとクライアントIDを正しく設定していることを確認してください。アイデンティティプロバイダとしてIAMでコンフィグレーションする場合は、オーディエンスを同じクライアントIDに一致させる必要があります。 (これも動作します)。

注:この問題は、「認証されていない」アクセスを構成し、ログインハッシュを使用して資格情報を取得しようとしたが、認証されていないIDを使用した場合に発生する可能性があります。私はあなたが切り替えるためにgetIdResultを行う必要があると思います。

0

設定に問題がありました。既存のIDプール、Cognitoユーザープールを認証プロバイダとして追加しました。ユーザープールIDとクライアントIDを指定しました。

次に、変更を保存します。ダッシュボードの緑色に表示され、変更が保存されました。しかし、実際にはそうではありませんでした!それがエラーの理由でした。

解決策として、新しいアイデンティティプールを最初から作成し、作成中に追加しました。認証プロバイダとしてのCognitoユーザープール。それだけが、プールの作成後に適切に保存されました。

0

他の誰もが同じ警告を受けた場合は、未確認のメールでCognito IDプールにログインすることはできますが、同じユーザーはCognito IDプロバイダに対して認証することはできません。

Error: Logins don't match. Please include at least one valid login for this identity or identity pool.

ユーザーは、Cognitoコンソールから「確認済み」に設定することができます。これは「電子メールで確認済み」とはみなされません。ユーザーはプールにログインすることができます。

完全に確認されていないユーザーは、まったくログインできません。

関連する問題