Edited at

Cognitoユーザプール認証後にIDプールと連携して一時クレデンシャルを貰う


概要

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."


ユーザプールで認証する

こっち