

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

# 認証前の Lambda トリガー
<a name="user-pool-lambda-pre-authentication"></a>

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

**注記**  
この Lambda トリガーは、ユーザープールのアプリケーションクライアントの `PreventUserExistenceErrors` 設定を `ENABLED` に指定していない限り、ユーザーが存在しない場合はアクティブになりません。既存の認証セッションを更新しても、このトリガーはアクティブになりません。

**Topics**
+ [フローの概要](#user-pool-lambda-pre-authentication-1)
+ [認証前の Lambda トリガーのパラメータ](#cognito-user-pools-lambda-trigger-syntax-pre-auth)
+ [事前認証の例](#aws-lambda-triggers-pre-authentication-example)

## フローの概要
<a name="user-pool-lambda-pre-authentication-1"></a>

![\[認証前の Lambda トリガー - クライアントフロー\]](http://docs.aws.amazon.com/ja_jp/cognito/latest/developerguide/images/lambda-pre-authentication-1.png)


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

詳細については、「[認証セッションの例](authentication.md#amazon-cognito-user-pools-authentication-flow)」を参照してください。

## 認証前の Lambda トリガーのパラメータ
<a name="cognito-user-pools-lambda-trigger-syntax-pre-auth"></a>

Amazon Cognito がこの Lambda 関数に渡すリクエストは、以下のパラメータと Amazon Cognito がすべてのリクエストに追加する[共通パラメータ](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-working-with-lambda-triggers.html#cognito-user-pools-lambda-trigger-syntax-shared)を組み合わせたものです。

------
#### [ JSON ]

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

------

### 認証前のリクエストパラメータ
<a name="cognito-user-pools-lambda-trigger-syntax-pre-auth-request"></a>

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

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

**validationData**  
ユーザーのサインインリクエストに検証データを含む 1 つ以上のキーバリューペア。このデータを Lambda 関数に渡すには、[InitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html) および [AdminInitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminInitiateAuth.html) API アクションで ClientMetadata パラメータを使用します。

### 認証前のレスポンスパラメータ
<a name="cognito-user-pools-lambda-trigger-syntax-pre-auth-response"></a>

Amazon Cognito は、関数がレスポンスで返す追加情報を処理しません。関数がエラーを返してサインイン試行を拒否したり、API オペレーションを使用してリソースをクエリしたり変更できます。

## 事前認証の例
<a name="aws-lambda-triggers-pre-authentication-example"></a>

このサンプル関数は、特定のアプリクライアントからユーザープールにサインインされるのを防ぎます。事前認証の 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": {}
}
```

------