カスタム認証プロバイダ(開発者認証)のIDトークンを正常に取得できました。これは、Cognito devauthデモサーブレットを使用して実装されています。AWS Cognito returned - '無効なログイントークン。 Cognitoトークンではない
このトークンは、AWS JS SDKを実行しているブラウザに戻されます。 getCredentialsForIdentiyを呼び出すと、「無効なログイントークン」エラーが表示されます。
POST https://cognito-identity.us-west-2.amazonaws.com/ 400 (Bad Request)
app.js:150 Error: Invalid login token. Not a Cognito token.
at constructor.a (aws-sdk-2.58.0.min.js:41)
at constructor.callListeners (aws-sdk-2.58.0.min.js:41)
at constructor.emit (aws-sdk-2.58.0.min.js:41)
at constructor.emitEvent (aws-sdk-2.58.0.min.js:41)
at constructor.e (aws-sdk-2.58.0.min.js:41)
at i.runTo (aws-sdk-2.58.0.min.js:43)
at aws-sdk-2.58.0.min.js:43
at constructor.<anonymous> (aws-sdk-2.58.0.min.js:41)
at constructor.<anonymous> (aws-sdk-2.58.0.min.js:41)
at constructor.callListeners (aws-sdk-2.58.0.min.js:41) "NotAuthorizedException: Invalid login token. Not a Cognito token.
at constructor.a (https://sdk.amazonaws.com/js/aws-sdk-2.58.0.min.js:41:615)
at constructor.callListeners (https://sdk.amazonaws.com/js/aws-sdk-2.58.0.min.js:41:30513)
at constructor.emit (https://sdk.amazonaws.com/js/aws-sdk-2.58.0.min.js:41:30224)
at constructor.emitEvent (https://sdk.amazonaws.com/js/aws-sdk-2.58.0.min.js:41:16590)
at constructor.e (https://sdk.amazonaws.com/js/aws-sdk-2.58.0.min.js:41:12285)
at i.runTo (https://sdk.amazonaws.com/js/aws-sdk-2.58.0.min.js:43:7277)
at https://sdk.amazonaws.com/js/aws-sdk-2.58.0.min.js:43:7482
at constructor.<anonymous> (https://sdk.amazonaws.com/js/aws-sdk-2.58.0.min.js:41:12495)
at constructor.<anonymous> (https://sdk.amazonaws.com/js/aws-sdk-2.58.0.min.js:41:16645)
at constructor.callListeners (https://sdk.amazonaws.com/js/aws-sdk-2.58.0.min.js:41:30619)"
次のパラメータをgetCredentialsForIdentityに渡します。
identityId: <returned from servlet in region:guid format>
customRoleArn: <that maps to authenticated role>
Logins: <cognito-identity.amazonaws.com = token returned by congito>
idブラウザを使用すると、新しいcongnito IDが作成されていることがわかりました。したがって、サーブレットとのトークンの相互作用は正しいようです。しかし、トークンは拒否されています。
私はここで何が欠けていますか?どうすればそれをさらにトラブルシューティングできますか?
編集: ブラウザクライアント:javascript sdk、バージョン2.58 JSクライアントを本来this demoに書き込んでいます。この変更は、ログイン呼び出し自体の一部としてトークンを取得するだけです。生成されたトークンは、IOTクライアント・アクセスのみを持つロールに対応します。 (私はその政策が拡大する必要があるのだろうと思う)。最終的に、ユーザーはこのデモではなく内部IDストアに対して検証されます。
編集2: Cognitoサービスに対してgetCredentialsForIdentiyを呼び出す代わりに、私はSTSに対してassumeRoleWithWebIdentityを呼び出し、それが機能しました。拡張フローhere.ではなく、基本フローの使用。なぜ、拡張されたフローがうまくいかなかったのかは分かりませんが、今は基本的なフローのアプローチをとるでしょう。
お使いのSDKはどちらですか?あなたはこの流れをどのように管理しているかについてもう少し詳しく説明できますか?あなたが説明したことは正しく聞こえるので、それはちょっとしたことであるはずです。 –
ありがとう!追加の詳細を追加しました。 – user1452132