ID プロバイダーを Amazon Cognito と統合した後に、OIDC またはソーシャル ID プロバイダーが発行したトークンを取得する方法を教えてください。

所要時間2分
0

Amazon Cognito ユーザープールと統合されている ID プロバイダー (IdP) から発行されたアクセストークンと ID トークンを取得したいと考えています。

簡単な説明

OpenID Connect (OIDC) IdP 認証フローでは、Amazon Cognito は IdP が発行した認証コードを IdP トークンと交換します。その後、Amazon Cognito は独自のトークンセットを準備し、フェデレーションが成功したらエンドユーザーに返します。ただし、このプロセスでは、ユーザーまたはアプリケーションは実際の IdP サイドトークンを確認できません。ユースケースによっては、認証やトラブルシューティングの目的で、アプリケーション内で実際に IdP が発行したトークンを必要とする場合があります。Amazon Cognito ユーザープールにフェデレートするときに IdP が発行したアクセストークンと ID トークンを取得して保存するには、「解決」セクションの手順に従ってください。

**重要:**この記事の手順では、OIDC IdP またはソーシャル IdP を Amazon Cognito ユーザープールと既に統合していることを前提としています。IdP をユーザープールと統合していない場合は、手順に従ってサードパーティー経由でユーザープールサインインを追加します

解決方法

ユーザープールにカスタム属性を作成する

次の手順に従って、ユーザープールにカスタム属性を作成します。

1.    新しい Amazon Cognito コンソールを開き、ユーザープールの [Sign-up Experience] (サインアップエクスペリエンス) タブを選択します。

2.    [Custom Attributes] (カスタム属性) セクションで、[Add custom attributes] (カスタム属性を追加) ボタンを選択します。

3.    アクセストークンのカスタム属性を作成するには、次の値を入力して変更を保存します。

  • 名前: access_token
  • タイプ: 文字列
  • 最大: 2,048
  • 変更可能: このチェックボックスを選択してください

4.    ID トークンのカスタム属性を作成するには、次の値を入力して変更を保存します。

  • 名前: id_token
  • タイプ: 文字列
  • 最大: 2,048
  • 変更可能: このチェックボックスを選択してください

Amazon Cognito と IdP 間の属性マッピングを設定する

IdP 属性への属性マッピングを設定するには、次の手順に従います。

1.    新しい Amazon Cognito コンソールを開き、ユーザープールの [Sign-in Experience] (サインインエクスペリエンス) タブを選択します。

2.    [Federated Identity Provider sign-in] (フェデレーテッドアイデンティティプロバイダーのサインイン) セクションで、リストからお使いの IdP を選択します。

3.    [Identity provider information] (アイデンティティプロバイダーに関する情報 ) セクションの近くにある [Edit] (編集) オプションを選択します。[Authorized scopes] (許可されたスコープ) セクションに次のスコープが表示されていることを確認してください。

  • Facebook のサンプルスコープ: public_profile, email
  • Google のサンプルスコープ: profile email openid
  • Amazon でログインのサンプルスコープ: profile postal_code
  • Apple でログイン サンプルスコープ: email name
  • その他すべての OIDC プロバイダーのサンプルスコープ: profile email openid

4.    [Identity provider] (ID プロバイダー) ページに 1 つ戻ってください。[Attribute mapping] (属性マッピング) セクションの近くの [編集] を選択します。

5.    [User pool attribute] (ユーザープール属性) 列から、最初に作成したカスタム属性を選択します。

6.    [OpenID Connect attribute] (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 トークンを更新するには、アプリケーションのアプリケーションクライアント設定で属性が読み取り可能である必要があります。

1.    新しい Amazon Cognito コンソールを開き、ユーザープールの [App integration] (アプリケーションの統合) タブを選択します。

2.    アプリケーションクライアントのリストからお使いのアプリケーションクライアントを選択します。

3.    [Attribute read and write permissions] (属性の読み込みおよび書き込みアクセス権限) セクションで、[Edit] (編集) を選択します。

4.    [Edit attribute read and write permissions] (属性の読み取りと書き込み許可を編集) ページで、カスタム属性の [read] (読み取り) と [write] (書き込み) チェックボックスを選択します。

5.    変更を保存します。

カスタム属性を使用するアプリケーションクライアントごとに、上記の手順を繰り返します。

詳細については、「ユーザープール属性」を参照し、[Attribute permissions and scopes] (属性の許可とスコープ) タブに移動してください。

サードパーティーの OIDC プロバイダーまたはソーシャル IdP を使用してサインインする

Amazon Cognito Hosted 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」(文字列属性の長さは 2048 文字を超えることはできません) というエラーが表示されます。
  • カスタム属性は、作成後に削除または変更することはできません。
  • その後のログインでカスタム属性が更新されない場合は、カスタム属性の可変性を確認してください。この問題は、属性の作成時に [Mutable] (変更可能) チェックボックスをオフにした後に発生することが予想されます。詳細については、「ユーザープール属性」を参照し、[Custom attributes] (カスタム属性) タブに移動してください。

注: 上記の手順を実行してもまだ IdP トークンを取得できない場合は、IdP に連絡してください。IdP が属性内のトークンを Amazon Cognito に渡すことをサポートしているかどうかを確認してください。確認したら、AWS サポートに連絡して追加のトラブルシューティングを依頼できます。


関連情報

Auth0 を Amazon Cognito ユーザープールの OIDC プロバイダーとして設定するにはどうすればよいですか?

Amazon Cognito ユーザープールで LinkedIn を ソーシャル ID プロバイダーとして設定するにはどうすればよいですか?

Amazon Cognito ユーザープールで Okta を OpenID Connect プロバイダーとしてセットアップするにはどうすればよいですか?

Amazon Cognito ユーザープールで Google をフェデレーティッド ID プロバイダーとして設定するにはどうすればよいですか?

AWS公式
AWS公式更新しました 1年前
コメントはありません

関連するコンテンツ