現在、AWS Cognitoを理解するのに苦労しているので、誰かが助けてくれるかもしれません。説明されているように、ユーザープールにCognitoのホストされたUIを提供するようにドメインを設定しました here 。 https://<my-domain>.auth.us-east-1.amazoncognito.com/login?response_type=code&client_id=<MY_POOL_CLIENT_ID>&redirect_uri=https://localhost:8080
にアクセスすると、ユーザーがGoogleでアプリにログインできるログインページが表示されます。その部分はうまく機能しています。
ユーザーがログインすると、そのページから返されるコードをどう処理するか混乱しました。そのため、Googleにリダイレクトされ、アプリケーションに情報の表示を許可すると、次のコードでURLの1つにリダイレクトされます。クエリパラメータ。現在、ローカルホストにリダイレクトしているので、リダイレクトURLは次のようになります。
https://localhost:8080/?code=XXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXX
このコードは正確には何ですか?また、それを使用してユーザーのAWSリソースにアクセスするにはどうすればよいですか?
「認証コード付与」はドキュメントで見つけることができます: http://docs.aws.Amazon.com/cognito/latest/developerguide/cognito-user-pools-app-idp-settings.html =
認証コードoath2フローによって返されたコードリクエストパラメーターからAWS認証情報(id_token、access_tokenおよびrefresh_token)をフェッチするには、 https:// docsに従って、CognitoユーザープールWebドメイン/oauth2/token
エンドポイントを使用する必要があります.aws.Amazon.com/cognito/latest/developerguide/token-endpoint.html 手順。
HTTP基本認証のユーザーとパスワードの説明に注意してください。これはCognitoアプリclient_id
とclient_secret
である必要があります。そうしないと、invalid_client
エラーが発生します。
トークンがURLに浮かぶのを回避するため、コードフローはサーバー側で使用されることになっています。そのクライアント側を実行することを計画している場合は、response_type=token
を使用する必要があります。これは、この結果がログインリダイレクトで直接得られるためです。
これは、質問されてから10か月後に役立つかどうかはわかりませんが、他の人にとっては役立つかもしれません。
利用した response_type=token
(Oauthフロー= implicit grant
&scope = openid
)&プロバイダーをCognito
として。デフォルトのログインページを使用してログインすると、id_token
&access_token
。これを使用して、ユーザーの一時的なIDを取得できますid_token
。また、認証されたユーザーと認証されていないユーザーに割り当てられ、認証に使用しているユーザープールにリンクされた役割を備えた、フェデレーションIDプールをセットアップする必要があります。それができたら(JavaScriptを使用していると仮定して)、 CognitoユーザーIDプールjavascriptの例 の例に従うことができます。同じから派生した私のサンプルコード-
function getAccessToken(idToken, identityPoolId, userPool) {
let provider = "cognito-idp.us-east-2.amazonaws.com/" + userPool;
let login = {};
login[provider] = idToken;
// Add the User's Id Token to the Cognito credentials login map.
let credentials = new AWS.CognitoIdentityCredentials({
IdentityPoolId: identityPoolId,
Logins: login
});
//call refresh method in order to authenticate user and get new temp credentials
credentials.get((error) => {
if (error) {
console.error(error);
let response = {
statusCode: 500,
body: JSON.stringify(error)
};
return response;
} else {
console.log('Successfully logged!');
console.log('AKI:'+ credentials.accessKeyId);
console.log('AKS:'+ credentials.secretAccessKey);
console.log('token:' + credentials.sessionToken);
let response = {
statusCode: 200,
body: JSON.stringify({
'AKI': credentials.accessKeyId,
'AKS': credentials.secretAccessKey,
'token': credentials.sessionToken
})
};
return response;
}
});
}
お役に立てれば。