Cognitoとは
※引用元:https://aws.amazon.com/jp/cognito
公式によるとこのような感じだそうです。
簡単に言うと「認証基盤を受け持ってくれるAWSのサービス」みたいな感じでしょうか。
詳細はクラスメソッドさんの記事に整理されているのでご覧ください。
Amazon Cognito と仲良くなるために歴史と機能を整理したし、 Cognito User Pools と API Gateway の連携も試した | Developers.IO
なぜOpenID Connect
OpenID Connectについてはこの素晴らしい記事をご覧ください。
一番分かりやすい OpenID Connect の説明 - Qiita
複数サービスを提供している企業がID共通基盤を構築しようとした時、既存ユーザーを抱えたままサービスを超えてお互いに認証したり、解析用に名寄せするにはこの選択が最良と考えました。(結果はまだわからない)
Yahoo! ID連携 v2
ひとまず自社のプロダクトをプロバイダーにする前にすでに公開されているプロバイダーでCognitoにログインしてみましょう。
こちらの記事を参考にさせていただきながら、Yahoo! ID連携 v2でCognitoにログインしてみました。
OpenID Connect体験 - Qiita
アプリケーションの登録
アプリケーションの管理:Yahoo!デベロッパーネットワーク
アプリケーション名などを入力して、登録します。
登録するとClient IDとシークレットが発行されます。
※認証するだけであればシークレットは必要ありません。
AWS Cognitoへ登録
CognitoでOpenID Connectを使う際には、IAMにIDプロバイダーとして登録する必要があります。
プロバイダーのURLに```https://auth.login.yahoo.co.jp/yconnect/v2``` 対象者にアプリケーション登録時に発行されたClient IDを入力します。登録されるとCognitoのOpenIDの項目にプロバイダーが追加されます。
ID Tokenを取得する
以下のURLをブラウザに打ち込みます。
client_idやredirect_uriは自分の環境に書き換えてください。
stateとnonceは不正アクセス対策としてサービス実装時には処理が必要ですが、今回は接続テストなので適当な値を入れました。
https://auth.login.yahoo.co.jp/yconnect/v2/authorization?response_type=code+id_token&client_id=【CLIENT_ID】&redirect_uri=http://localhost:8080&state=aaaa&scope=openid+profile&nonce=aaaa
リダイレクトされた際にGETパラメータにid_token=hogehogehogeがついてくるので、このid_tokenを使ってCognitoにアクセスしてみます。
ログインしてみる
id_tokenが取れたので、いよいよCognitoにアクセスしてみようと思います。
今回はJavaScriptでやってみました。
# sdk install
install aws-sdk --save
AWS.config.region = "ap-northeast-1";
AWS.config.credentials = new AWS.CognitoIdentityCredentials({
IdentityPoolId: "【IDENTITY_POOL_ID】",
Logins: {
'auth.login.yahoo.co.jp/yconnect/v2' : '【ID_TOKEN】'
}
});
AWS.config.credentials.get(function(err) {
console.log("Cognito Identify Id: " + AWS.config.credentials.identityId);
});
無事identityIdが払い出されて、ログインできました。