CognitoIDプールを使ってゲストユーザ(未認証ユーザ)に一時クレデンシャルを発行する
前提
- 認証とかどうでもいいんだけど、ユーザにとりあえず一時的にクレデンシャルを発行したい時用とする。
- クライアントはjavascript(aws-sdk)とする。
準備
CognitoIDプールを作成する
-
Cognitoの"フェデレーティッドアイデンティティ"のページを開く
-
"新しい ID プールの作成"ボタンを押す
-
Cognitoが認証した時と認証しなかった時に返すロールの設定画面に行く。特に変更なしで"許可"する。
※ここで設定するロールのクレデンシャルが返却される -
これでCognitoIDプールが作成される。
aws-sdk準備
- CDNのページ から最新版のリンク取得する
- 下記の内容のHTMLを用意
hoge.html
<html>
<script src="https://cdnjs.cloudflare.com/ajax/libs/aws-sdk/2.388.0/aws-sdk.js"></script>
</html>
実際にクレデンシャルを発行してみる
chromeのコンソールを使ってCognitoする
- 作成したHTMLを開く。
- 開発者コンソールを開いて下記を入力
※この時、Networkを開いておくとCognitoにリクエストを飛ばしているのが分かる
consoleに直接入力する
AWS.config.region = 'ap-northeast-1'; //重要
a = new AWS.CognitoIdentityCredentials({
IdentityPoolId: 'ap-northeast-XXXXXXXXXXXXXXXXXXXXXXX' //※
});
// ※Cognitoの"フェデレーティッドアイデンティティ"のページ
// > サイドメニューの「ダッシュボード」
// > 右上の方にある「IDプールの編集」
// > "ID プールの ID" に表示されているIDを設定する。(ARNではない)
a.get();
// ↑、エラーハンドリングする場合、
// 参考ページ(APIGatewayのIAM認証付きのAPIをJavascriptから叩く)に記載されているjs参照
dir(a); //中身確認用
※ちなみにリクエストの内訳は、
※リクエスト先は全て、https://cognito-identity.ap-northeast-1.amazonaws.com/
1発目:よくわからん。リクエストにOPTIONSを使っている
2発目:identityPoolIdをパラメータにして、identityIdを取得する
3発目:identityIdをパラメータにして、クレデンシャル情報を取得する
という感じ
結果確認
aの中身を見るとクレデンシャルが取得できていることが分かる。
※下記に値が入っている(下記の情報以外にも色々入ってる)
a.accessKeyId
a.sessionToken
a.secretAccessKey
この後、Cognitoの"フェデレーティッドアイデンティティ"のページを開き、作成したCognitoIDプールのページを開くと、
認証されていないアクセスがカウントアップされていることが確認できる。
※IDブラウザを開くと、アイデンティティIDが分かる
備考
一時クレデンシャルを使ったリクエストの注意
参考
-
APIGatewayのIAM認証付きのAPIをJavascriptから叩く
の "Cognito UnauthUserのCredentialでAPIを叩くJavascriptのコードを書く(完成)" のところのjavascript - AWS.CognitoIdentityCredentialsのaws-sdk公式