認証前の Lambda トリガー - Amazon Cognito

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

認証前の Lambda トリガー

Amazon Cognito は、ユーザーがサインインしようとするときにこのトリガーを呼び出し、準備アクションを実行するカスタム認証を作成できるようにします。たとえば、認証リクエストを拒否したり、外部システムへのセッションデータを記録したりできます。

注記

ユーザーが存在しない場合や、ユーザープールに既にセッションがある場合、この Lambda トリガーはアクティブになりません。ユーザープールアプリクライアントの PreventUserExistenceErrors 設定が ENABLED になっている場合、Lambda トリガーはアクティブになります。

認証フローの概要

認証前の Lambda トリガー - クライアントフロー

リクエストには、アプリケーションがユーザープールInitiateAuthAdminInitiateAuthAPIオペレーションに渡すClientMetadata値からのクライアント検証データが含まれます。

詳細については、「ユーザープール認証フロー」を参照してください。

認証前の Lambda トリガーのパラメータ

Amazon Cognito がこの Lambda 関数に渡すリクエストは、以下のパラメータと Amazon Cognito がすべてのリクエストに追加する共通パラメータを組み合わせたものです。

JSON
{ "request": { "userAttributes": { "string": "string", . . . }, "validationData": { "string": "string", . . . }, "userNotFound": boolean }, "response": {} }

認証前のリクエストパラメータ

userAttributes

ユーザー属性を表す 1 つ以上の名前 - 値ペア。

userNotFound

ユーザープールクライアントの PreventUserExistenceErrorsENABLED に設定すると、Amazon Cognito はこのブール値を入力します。

validationData

ユーザーのサインインリクエストに検証データを含む 1 つ以上のキーバリューペア。このデータを Lambda 関数に渡すには、 InitiateAuth および AdminInitiateAuthAPIアクションで ClientMetadata パラメータを使用します。

認証前のレスポンスパラメータ

Amazon Cognito は、レスポンスに追加の戻り情報を期待していません。関数は、サインイン試行を拒否するエラーを返すか、 APIオペレーションを使用してリソースをクエリして変更することができます。

事前認証の例

このサンプル関数は、特定のアプリクライアントからユーザープールにサインインされるのを防ぎます。事前認証の Lambda 関数は、ユーザーが既存のセッションを持っている場合は呼び出されないため、この関数はブロックするアプリクライアント ID の新規セッションのみを防止します。

Node.js
const handler = async (event) => { if ( event.callerContext.clientId === "user-pool-app-client-id-to-be-blocked" ) { throw new Error("Cannot authenticate users from this user pool app client"); } return event; }; export { handler };
Python
def lambda_handler(event, context): if event['callerContext']['clientId'] == "<user pool app client id to be blocked>": raise Exception("Cannot authenticate users from this user pool app client") # Return to Amazon Cognito return event

Amazon Cognito は Lambda 関数にイベント情報を渡します。関数はレスポンスで、同じイベントオブジェクトを変更と共に Amazon Cognito に返します。Lambda コンソールで、Lambda トリガーに関連するデータを使用したテストイベントをセットアップできます。以下は、このコードサンプルのテストイベントです。

JSON
{ "callerContext": { "clientId": "<user pool app client id to be blocked>" }, "response": {} }