はじめに
今回は、Cognitoを使ったID連携の挙動を確認してみます!
ID連携とは?
シングルサインオンの方が馴染みあるかもですが、ユーザーが複数のサービスを利用する際に同じ一つのIDだけで利用できる仕組みのことです。
「Xでログイン」みたいなやつですね。
やってみます!
今回はGoogleアカウントでのログインで検証してみました。
Google Auth Platformの構成
まずは、Google側の設定をします。
Googleの場合、Google Auth Platform
の設定が必要みたいです。
初めて利用する場合、以下のような未構成状態なので、画面案内に沿って構成していきます!
データアクセス設定
次に、データアクセスの設定を行います。
ID連携したユーザの情報をどこまで公開するかの設定です。
対象は以下を選択します。
.../auth/userinfo.email
.../auth/userinfo.profile
openid
クライアント作成
次にクライアントを作成します。
クライアントとは、認証サーバーとやり取りをするアプリケーションのことで、ユーザーの代わりに、認証サーバーからの認証と認可の処理を行ってくれます。
アプリケーションの種類はウェブアプリケーション
を選択し、名前は適当に設定します。
承認済みの JavaScript 生成元
及び、承認済みのリダイレクト URI
は以下の値を設定します。
項目 | 設定値 |
---|---|
承認済みの JavaScript 生成元 | https://[ドメイン名].auth.ap-northeast-1.amazoncognito.com |
承認済みのリダイレクト URI | https://[ドメイン名].auth.ap-northeast-1.amazoncognito.com/oauth2/idpresponse |
ドメイン名は以下で確認できますが、カスタムドメインを使わない場合は、ユーザプールIDを入れることになります。
ここまで作成すると、クライアントIDとクライアントシークレットが作成されるので、これを覚えておきます。(後からも確認可能です。)
これでGC側の設定は完了になります!
Cognitoの設定
次にCognito側の設定をします。
ユーザプールのソーシャルプロバイダーとカスタムプロバイダー
のアイデンティティプロバイダーの追加
からGoogleを追加します。
GC側で作ったクラアントID及びクライアントシークレットを設定し、許可されたスコープにはprofile email openid
を設定しておきます。
属性のマッピングの設定が必要な場合、適切な設定をしておきます。
最後にクライアントのIDプロバイダーに先ほど作成したGoogle
を追加すれば完了です!
動作確認
マネージドログイン画面を表示すると、Googleでサインイン
が出てきました。
ログイン操作を進めると、以下のような見慣れた画面が表示され、ログインが成功しました!
IDトークンの中身を見ると、Googleアカウントでログインできてそうです!
{
"at_hash": "lLfqLkQXnm-mnybTuA6dbQ",
"sub": "11111111-c011-7004-ef22-444444444444",
"cognito:groups": [
"ap-northeast-1_XXXXXXXXX_Google"
],
"iss": "https://cognito-idp.ap-northeast-1.amazonaws.com/ap-northeast-1_NN5Ct2qua",
"cognito:username": "google_1111111111111111111111",
"nonce": "8HIZ7ypLB7ZyUHVKsQBGXSwL2kOGj5XxS3ai7lQ5pNNCPDpMjmz4XgHupmiUyHqxjtFVoMPwqCGwOYj9zV34jgvbWjwHCXqCSzp28eHy-fHXbD4MUks1SLb7Msp8r358waoQrOeQUzeaLFpaNnjPbqmSTm_vrnLmpkS8ycuoGOs",
"origin_jti": "6d7be651-b393-4689-a92a-98ffe7dbc98b",
"aud": "ar4sjg7u1g1t16cah2rjdddd",
"identities": [
{
"dateCreated": "1745787680798",
"userId": "1111111111111111111111",
"providerName": "Google",
"providerType": "Google",
"issuer": null,
"primary": "true"
}
],
"token_use": "id",
"auth_time": 1746213920,
"name": "Satoshi Moriyama",
"exp": 1746217520,
"iat": 1746213920,
"jti": "08b75547-a27d-4828-b5e8-5943163b0bc1"
}
まとめ
簡単にID連携が実装できました!
あとGCを触ることが出来たのが個人的に良かったです!