概要
Cognitoユーザプール認証後にIDプール(フェデレーティッドアイデンティティ)と連携して一時クレデンシャルを貰う。
※Cognitoのユーザプールでの認証するところまでを最速でやる の続き。
手順
AWS SDKをダウンロードする
https://github.com/aws/aws-sdk-js/releases から、最新の browser.zip を取得する。
zip の中から aws-sdk.js を取得する。
一時クレデンシャルの取得
Cognitoのユーザプールでの認証するところまでを最速でやる で作ったjsの後に、公式 内の "ユーザープールを ID プールと統合する" に書かれているjsを追記する。
※YOUR_IDENTITY_POOL_ID、region、YOUR_USER_POOL_IDはそれぞれ自分の環境に合わせて置き換える事。
※YOUR_IDENTITY_POOL_IDの確認場所:Cognito > フェデレーティッドアイデンティティ > プールを選択 > 右上の方にある "IDプールの編集" > IDプールのIDっていうやつ(ap-northeast-1:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)
その後、更に↓追加。
AWS.config.region = 'ap-northeast-1'; // 大事
AWS.config.credentials.get(function(){});
AWS.config.credentials
の中に accesskeyId、secretAccessKey、sessionToken が入っていればOK。
また、フェデレーティッドアイデンティティ画面の "認証方法" 内のユーザプールの項目がカウントアップする。
windowsの場合、DOS窓から
set AWS_ACCESS_KEY_ID=<Access-Key-as-in-Previous-Output>
set AWS_SECRET_ACCESS_KEY=<Secret-Access-Key-as-in-Previous-Output>
set AWS_SESSION_TOKEN=<Session-Token-as-in-Previous-Output>
して、
aws sts get-caller-identity
して、IDプールの設定で、 "認証されたロール" で設定したロールの割り当てができていればOK。
※参考
余談
未認証で一時クレデンシャルを取得する
AWS.CognitoIdentityCredentials()
の中で Logins
を指定しているが、Logins
を消すと、"認証されていないロール" のロールが一時クレデンシャルとして取得できる。
Loginsに設定するtokenを出鱈目にする
Logins にユーザプール認証で取得したトークンを指定しているが、ここを出鱈目な文字列に変更すると、↓で怒られる。
message: "Invalid login token. Not a valid OpenId Connect identity token."