翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
トークン生成前の Lambda トリガー
Amazon Cognito は、このトリガーをトークンの生成前に呼び出すため、ユーザープールトークンのクレームをカスタマイズできます。バージョン 1 または V1_0
のトークン生成前トリガーイベントの基本機能を使用して、アイデンティティ (ID) トークンをカスタマイズできます。Essentials または Plus 機能プランを使用するユーザープールでは、アクセストークンをカスタマイズしてバージョン 2 またはV2_0
トリガーイベントを生成できます。
Amazon Cognito は、ID トークンに書き込むデータが含まれているリクエストとして V1_0
イベントを関数に送信します。V2_0
イベントは、Amazon Cognito が ID トークンとアクセストークンの両方に書き込むデータが含まれている 1 つのリクエストです。両方のトークンをカスタマイズするには、最新のトリガーバージョンを使用するように関数を更新し、同じレスポンスで両方のトークン用のデータを送信する必要があります。
この Lambda トリガーでは、Amazon Cognito がアプリケーションに発行する前の ID トークンとアクセストークンの一部のクレームを追加、削除、変更できます。この機能を使用するには、Amazon Cognito ユーザープールコンソールから Lambda 関数を関連付けるか、 AWS Command Line Interface
(AWS CLI) でユーザープール LambdaConfig
を更新します。
イベントバージョン
ユーザープールは、トークン生成前トリガーイベントのさまざまなバージョンを Lambda 関数に配信できます。V1_0
トリガーは、ID トークンを変更するためのパラメータを配信します。V2_0
トリガーは、以下のパラメータを配信します。
-
V1_0
トリガーの関数。 -
アクセストークンをカスタマイズする機能。
-
複雑なデータ型を ID に渡し、次のトークンクレーム値にアクセスする機能。
-
String
-
数値
-
ブール値
-
文字列、数値、ブール値、またはこれらの組み合わせの配列
-
JSON
-
注記
ID トークンでは、phone_number_verified
、email_verified
、updated_at
および address
を除くクレームの値に複雑なオブジェクトを入力できます。
ユーザープールはデフォルトで V1_0
イベントを配信します。V2_0
イベントを送信するようにユーザープールを設定するには、Amazon Cognito コンソールでトリガーを設定するときに、[基本機能 + アクセストークンのカスタマイズ] の [トリガーイベントバージョン] を選択します。UpdateUserPool API リクエストまたは CreateUserPool API リクエストの LambdaConfig パラメータで LambdaVersion
の値を設定することもできます。V2_0
イベントによるアクセストークンのカスタマイズには追加料金がかかります。詳細については、「Amazon Cognito の料金
除外されたクレームとスコープ
Amazon Cognito は、アクセストークンと ID トークンに対して追加、変更、または抑制できるクレームとスコープを制限します。Lambda 関数がこれらのクレームのいずれかに値を設定しようとすると、Amazon Cognito は元のクレーム値 (リクエストに存在する場合) を含むトークンを発行します。
共有クレーム
-
acr
-
amr
-
at_hash
-
auth_time
-
azp
-
exp
-
iat
-
iss
-
jti
-
nbf
-
nonce
-
origin_jti
-
sub
-
token_use
ID トークンのクレーム
-
identities
-
aud
-
cognito:username
アクセストークンのクレーム
-
username
-
client_id
-
scope
注記
アクセストークンのスコープは
scopesToAdd
およびscopesToSuppress
レスポンス値で変更できますが、scope
クレームを直接変更することはできません。ユーザープールのリザーブドスコープaws.cognito.signin.user.admin
など、aws.cognito
で始まるスコープを追加することはできません。 -
device_key
-
event_id
-
version
以下のプレフィックスを含むクレームを追加またはオーバーライドすることはできませんが、これらをトークンで抑制または非表示にすることはできます。
-
dev:
-
cognito:
IAM ロールクレームの cognito:roles
と cognito:preferred_role
は、デフォルトでユーザープールグループにリンクされています。これらのクレームを抑制するには、claimsToSuppress
オブジェクトで cognito:groups
を抑制します。
aud
クレームをアクセストークンに追加することはできますが、その値は現在のセッションのアプリクライアント ID と一致する必要があります。リクエストイベントのクライアント ID は、event.callerContext.clientId
から取得できます。
ID トークンのカスタマイズ
トークン生成前の Lambda トリガーを使用すると、ユーザープールのアイデンティティ (ID) トークンの内容をカスタマイズできます。ID トークンは、ウェブまたはモバイルアプリにサインインするためのユーザー属性を、信頼できる ID ソースから提供します。ID トークンの詳細については、「ID トークンの理解」を参照してください。
トークン生成前の Lambda トリガーでは、ID トークンを使用して以下のような操作を行います。
-
ユーザーがアイデンティティプールにリクエストした IAM ロールをランタイムに変更します。
-
外部ソースからユーザー属性を追加します。
-
既存のユーザー属性値を追加または置換します。
-
アプリに渡されるはずのユーザー属性が、ユーザーの許可されたスコープや、アプリクライアントに付与した属性の読み取りアクセス権により開示されることを抑制します。
アクセストークンのカスタマイズ
トークン生成前の Lambda トリガーを使用すると、ユーザープールのアクセストークンの内容をカスタマイズできます。アクセストークンは、Amazon Cognito トークン認可 API オペレーションやサードパーティ API などのアクセス保護されたリソースから情報を取得することをユーザーに許可します。Amazon Cognito では、クライアント認証情報の付与により Machine-to-Machine (M2M) 認可用のアクセストークンを生成できますが、M2M リクエストではトークン生成前のトリガー関数が呼び出されず、カスタマイズされたアクセストークンを発行できません。アクセストークンの詳細については、「アクセストークンの理解」を参照してください。
トークン生成前の Lambda トリガーでは、アクセストークンを使用して以下のような操作を行います。
-
scope
クレームでの OAuth 2.0 スコープの追加または抑制を行います 例えば、スコープaws.cognito.signin.user.admin
のみを割り当てる Amazon Cognito ユーザープール API 認証で生成されたアクセストークンにスコープを追加できます。 -
ユーザープールグループのユーザーのメンバーシップを変更します。
-
Amazon Cognito アクセストークンにまだ存在していないクレームを追加します。
-
アプリに渡されるはずのクレームの開示を抑制します。
ユーザープールでのアクセスのカスタマイズをサポートするには、トリガーリクエストの更新バージョンを生成するようにユーザープールを設定する必要があります。ユーザープールを更新するには、次の手順に従います。
トピック
トークン生成前の Lambda トリガーのソース
triggerSource 値 | イベント |
---|---|
TokenGeneration_HostedAuth |
Amazon Cognito マネージドログインサインインページから認証中に呼び出されます。 |
TokenGeneration_Authentication |
ユーザー認証フローが完了した後に呼び出されます。 |
TokenGeneration_NewPasswordChallenge |
管理者によってユーザーが作成された後に呼び出されます。このフローは、ユーザーが一時パスワードを変更する必要があるときに呼び出されます。 |
TokenGeneration_AuthenticateDevice |
ユーザーデバイスの認証の終了時に呼び出されます。 |
TokenGeneration_RefreshTokens |
ユーザーが ID およびアクセスのトークンを更新しようとしたときに呼び出されます。 |
トークン生成前の Lambda トリガーのパラメータ
Amazon Cognito がこの Lambda 関数に渡すリクエストは、以下のパラメータと Amazon Cognito がすべてのリクエストに追加する共通パラメータを組み合わせたものです。トークン生成前の Lambda トリガーをユーザープールに追加するときに、トリガーバージョンを選択できます。このバージョンにより、Amazon Cognito がアクセストークンをカスタマイズするための追加パラメータを含むリクエストを Lambda 関数に渡すかどうかが決まります。
トークン生成前のリクエストパラメータ
名前 | 説明 | トリガーイベントの最小バージョン |
---|---|---|
userAttributes |
ユーザープール内のユーザープロファイルの属性。 |
1 |
groupConfiguration |
現在のグループ設定を含む入力オブジェクト。このオブジェクトには、 |
1 |
groupsToOverride |
ユーザーがメンバーになっているユーザープールグループ。 |
1 |
iamRolesToOverride |
ユーザープールグループを AWS Identity and Access Management (IAM) ロールに関連付けることができます。この要素は、ユーザーがメンバーになっているグループのすべての IAM ロールのリストです。 |
1 |
preferredRole |
ユーザープールグループには、優先順位を設定できます。この要素には、 |
1 |
clientMetadata |
トークン生成前のトリガーに指定する Lambda 関数へのカスタム入力として提供できる 1 つ、または複数のキー/値ペア。 このデータを Lambda 関数に渡すには、AdminRespondToAuthChallenge および RespondToAuthChallenge API オペレーションで ClientMetadata パラメータを使用します。Amazon Cognito は、トークン生成前の関数に渡すリクエストの AdminInitiateAuth および InitiateAuth API オペレーションに |
1 |
scopes |
ユーザーの OAuth 2.0 スコープ。アクセストークンに含まれるスコープは、ユーザーがリクエストし、アプリクライアントに発行を許可したユーザープールの標準スコープとカスタムスコープです。 |
2 |
トークン生成前のレスポンスパラメータ
名前 | 説明 | トリガーイベントの最小バージョン |
---|---|---|
claimsOverrideDetails | A container for all elements in a V1_0 trigger event. |
1 |
claimsAndScopeOverrideDetails |
|
2 |
idTokenGeneration |
ユーザーの ID トークンで上書き、追加、または抑制するクレーム。ID トークンのカスタマイズ値に対するこの親はバージョン 2 のイベントにのみ表示されますが、子要素はバージョン 1 のイベントに表示されます。 |
2 |
accessTokenGeneration |
ユーザーのアクセストークンで上書き、追加、または抑制するクレームとスコープ。アクセストークンのカスタマイズ値に対するこの親は、バージョン 2 のイベントにのみ表示されます。 |
2 |
claimsToAddOrOverride |
追加または変更する 1 つ以上のクレームとその値のマップ。グループ関連のクレームには、代わりに バージョン 2 のイベントの場合、この要素は |
1* |
claimsToSuppress |
Amazon Cognito で抑制するクレームのリスト。関数がクレーム値の非表示と置換の両方を行う場合、Amazon Cognito はクレームを非表示にします。 バージョン 2 のイベントの場合、この要素は |
1 |
groupOverrideDetails |
現在のグループ設定を含む出力オブジェクト。このオブジェクトには、 この関数は、 Amazon Cognito ID とアクセストークンには、両方とも |
1 |
scopesToAdd |
ユーザーのアクセストークンで |
2 |
scopesToSuppress |
ユーザーのアクセストークンで |
2 |
* バージョン 1 イベントへのレスポンスオブジェクトは文字列を返すことができます。バージョン 2 イベントへのレスポンスオブジェクトは、複雑なオブジェクトを返す可能性があります。
トークン生成前トリガーイベントバージョン 2 の例:クレーム、スコープ、グループの追加と非表示
この例では、ユーザーのトークンに以下の変更を行います。
-
ID トークンに
family_name
としてDoe
を設定します。 -
ID トークンに
email
クレームとphone_number
クレームが表示されないようにします。 -
ID トークンの
cognito:roles
クレームを"arn:aws:iam::123456789012:role\/sns_callerA","arn:aws:iam::123456789012:role\/sns_callerC","arn:aws:iam::123456789012:role\/sns_callerB"
に設定します。 -
ID トークンの
cognito:preferred_role
クレームをarn:aws:iam::123456789012:role/sns_caller
に設定します。 -
スコープとして
openid
、email
、solar-system-data/asteroids.add
をアクセストークンに追加します。 -
アクセストークンの
phone_number
スコープとaws.cognito.signin.user.admin
スコープを非表示にします。phone_number
を削除すると、userInfo
からユーザーの電話番号が取得されなくなります。aws.cognito.signin.user.admin
を削除すると、ユーザーが Amazon Cognito ユーザープール API を使用して自分のプロファイルを読み取ったり変更したりするための API リクエストが禁止されます。注記
phone_number
をスコープから削除した場合、アクセストークンの残りのスコープにopenid
と少なくとも 1 つの標準スコープが含まれていれば、ユーザーの電話番号のみが取得できなくなります。詳細については、「スコープについて」を参照してください。 -
ID トークンとアクセストークンの
cognito:groups
クレームを"new-group-A","new-group-B","new-group-C"
に設定します。
Amazon Cognito は Lambda 関数にイベント情報を渡します。関数はレスポンスで、同じイベントオブジェクトを変更と共に Amazon Cognito に返します。Lambda コンソールで、Lambda トリガーに関連するデータを使用したテストイベントをセットアップできます。以下は、このコードサンプルのテストイベントです。
トークン生成前イベントバージョン 2 の例: 複雑なオブジェクトでクレームを追加する
この例では、ユーザーのトークンに以下の変更を行います。
-
ID トークンに数値、文字列、ブール値、JSON タイプのクレームを追加します。これは、ID トークンでバージョン 2 のトリガーイベントが利用できる唯一の変更です。
-
アクセストークンに数値、文字列、ブール値、JSON タイプのクレームを追加します。
-
アクセストークンに 3 つのスコープを追加します。
-
ID トークンとアクセストークンの
email
クレームを抑制します。 -
アクセストークンの
aws.cognito.signin.user.admin
スコープを抑制します。
Amazon Cognito は Lambda 関数にイベント情報を渡します。関数はレスポンスで、同じイベントオブジェクトを変更と共に Amazon Cognito に返します。Lambda コンソールで、Lambda トリガーに関連するデータを使用したテストイベントをセットアップできます。以下は、このコードサンプルのテストイベントです。
トークン生成前イベントバージョン 1 の例: 新しいクレームの追加と既存のクレームの非表示
この例では、トークン生成前の Lambda 関数でバージョン 1 のトリガーイベントを使用して、新しいクレームを追加し、既存のクレームを抑制します。
Amazon Cognito は Lambda 関数にイベント情報を渡します。関数はレスポンスで、同じイベントオブジェクトを変更と共に Amazon Cognito に返します。Lambda コンソールで、Lambda トリガーに関連するデータを使用したテストイベントをセットアップできます。以下は、このコードサンプルのテストイベントです。コード例 ではリクエストパラメータを処理しないため、空のリクエストでテストイベントを使用できます。共通のリクエストパラメータの詳細については、「ユーザープールの Lambda トリガーイベント」を参照してください。
トークン生成前イベントバージョン 1 の例: ユーザーグループのメンバーシップの変更
この例では、トークン生成前の Lambda 関数でバージョン 1 のトリガーイベントを使用し、ユーザーのグループメンバーシップを変更します。
Amazon Cognito は Lambda 関数にイベント情報を渡します。関数はレスポンスで、同じイベントオブジェクトを変更と共に Amazon Cognito に返します。Lambda コンソールで、Lambda トリガーに関連するデータを使用したテストイベントをセットアップできます。以下は、このコードサンプルのテストイベントです。