認証やトラブルシューティングの目的で Amazon Cognito ユーザープールと統合した ID プロバイダー (IdP) が発行したアクセストークンと ID トークンを取得する方法を学びたいです。
簡単な説明
OpenID Connect (OIDC) IdP 認証フローでは、ユーザーまたはアプリケーションが IdP 側のトークンを表示することはできません。認証やトラブルシューティングの目的で、一部のユースケースでは、アプリケーション内で実際に IdP が発行したトークンが必要になります。
重要: 以下の解決策は、OIDC IdP またはソーシャル IdP を Amazon Cognito ユーザープールと統合済みであることを前提としています。IdP をユーザープールと統合していない場合は、サードパーティ経由でユーザープールのサインインを追加してください。
解決策
ユーザープールにカスタム属性を作成する
ユーザープールにカスタム属性を作成するには、次の手順を実行します。
- 新しい Amazon Cognito コンソールを開き、ユーザープールの [サインアップエクスペリエンス] タブを選択します。
- [カスタム属性] セクションで、[カスタム属性を追加] を選択します。
- アクセストークンのカスタム属性を作成するには、次の値を入力します。
名前: access_token
タイプ: 文字列
最大: 2,048
変更可能: このチェックボックスを選択します
- [保存] を選択します。
- ID トークンのカスタム属性を作成するには、次の値を入力します。
名前: id_token
タイプ: 文字列
最大: 2,048
変更可能: このチェックボックスを選択します
- [保存] を選択します。
Amazon Cognito と IdP 間の属性マッピングを設定する
IdP 属性への属性マッピングを設定するには、次の手順を実行します。
- 新しい Amazon Cognito コンソールを開き、ユーザープールの [サインインエクスペリエンス] タブを選択します。
- [フェデレーテッドアイデンティティプロバイダーのサインイン] セクションで、リストから IdP を選択します。
- [ID プロバイダー情報] セクションで、[編集] を選択します。以下のスコープが [許可されたスコープ] セクションにあることを確認してください。
Facebook: public_profile, email
Google: profile email openid
Amazon でログイン: profile postal_code
Apple でサインイン: email name
その他 OIDC プロバイダーすべて: profile email openid
- [ID プロバイダー] ページの [属性マッピング] セクションで [編集] を選択します。
- [ユーザープール属性] 列から、カスタム属性を選択します。
- [OpenID Connect 属性] 列から、access_token または id_token を選択します。
- [保存] を選択します。
属性マッピングの設定の結果は次のとおりです。
- ユーザープール属性: custom:id_token
- OpenID Connect 属性: id_token
- ユーザープール属性: custom:access_token
- OpenID Connect 属性: access_token
Amazon Cognito アプリクライアントで属性の読み取りと書き込みのアクセス許可を有効にする
ユーザーがアプリケーションにサインインすると、Amazon Cognito はマッピングされた属性を更新します。Amazon Cognito でマッピングされたユーザープール属性を更新するには、マッピングされた属性がアプリケーションのアプリクライアント設定で書き込み可能である必要があります。Amazon Cognito でユーザーの ID トークンを更新するには、マッピングされた属性がアプリケーションのアプリクライアント設定で読み取り可能である必要があります。
読み取りと書き込みのアクセス許可を有効にするには、次の手順を実行します。
- 新しい Amazon Cognito コンソールを開き、ユーザープールの [アプリケーションの統合] タブを選択します。
- アプリクライアントを選択します。
- [属性の読み取りおよび書き込み許可] セクションで、[編集] を選択します。
- [属性の読み取りと書き込み許可を編集] ページで、カスタム属性の**[読み取り]** および [書き込み] チェックボックスを選択します。
- [保存] を選択します。
カスタム属性を使用するアプリクライアントごとに、これらの手順を繰り返します。
詳細については、「属性の権限と範囲」を参照してください。
サードパーティの OIDC プロバイダーまたはソーシャル IdP を使用してサインインする
Amazon Cognito でホストされた UI を使用して新しい IdP 認証を実行すると、カスタム属性に IdP トークンが表示されます。エンドユーザーを選択すると、その属性に IdP トークンが表示されます。ID トークンをデコードすると、IdP トークンを含むカスタム属性も確認できます。
エンドユーザーに発行される ID トークンのペイロードセクションの例:
{
"custom:access_token": "ya29.a0AeTM1ic9iv_FqpDQeIN......w1OPKdFEbR_Tea",
"iss": "https://cognito-idp.example_region.amazonaws.com/example_user_pool_id",
"custom:id_token": "eyJhbGciOiJSUzI1NiIsImtpZCI6IjhjMjdkYjRkMTN............saDMuZ29vZ2xldXNlcmNv"
}
重要:
- カスタム属性の最大長は 2,048 文字です。IdP トークンが 2,048 文字を超えると、次のエラーが表示されます。 「String attributes cannot have a length of more than 2048」
- カスタム属性は、作成後に削除または変更することができません。
- 以降のサインインでカスタム属性が更新されない場合は、カスタム属性の変更可能性を確認してください。この問題は、属性を作成する際に [変更可能] チェックボックスをオフにした後に発生すると考えられています。詳細については、「カスタム属性」を参照してください。
注: どうしても IdP トークンを取得できない場合は、IdP に連絡してください。IdP が Amazon Cognito への属性を持つトークンを渡すことをサポートしているかどうかを確認してください。その後に、AWS サポート に連絡して追加のトラブルシューティングを求めることができます。
関連情報
Auth0 を Amazon Cognito ユーザープールの OIDC プロバイダーとして設定するにはどうすればよいですか?
LinkedIn を Amazon Cognito ユーザープールのソーシャル ID プロバイダーとして設定するにはどうすればよいですか?
Amazon Cognito ユーザープールの OpenID Connect ID プロバイダーとして Okta をセットアップする方法を教えてください。
Amazon Cognito ユーザープールでフェデレーションアイデンティティプロバイダーとして Google を設定するにはどうすればよいですか?
トラブルシューティングのためにブラウザで SAML レスポンスを表示する方法