

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

# 認証チャレンジの作成の Lambda トリガー
<a name="user-pool-lambda-create-auth-challenge"></a>

認証チャレンジの作成のトリガーは、認証チャレンジの定義トリガーによって宣言された各チャレンジの詳細を持つ Lambda 関数です。これは、認証チャレンジの定義トリガーによって宣言されたチャレンジ名を処理し、アプリケーションがユーザーに提示する必要がある `publicChallengeParameters` を返します。次に、この関数は、ユーザープールが認証チャレンジ検証トリガーに渡すチャレンジに対する回答、 `privateChallengeParameters` をユーザープールに提供します。認証チャレンジの定義トリガーがチャレンジシーケンスを管理する場合、認証チャレンジの作成トリガーはチャレンジの内容を管理します。

![\[チャレンジの Lambda トリガー\]](http://docs.aws.amazon.com/ja_jp/cognito/latest/developerguide/images/lambda-challenges2.png)


**認証チャレンジの作成**  
**認証チャレンジの定義**トリガーの一部としてカスタムチャレンジが指定されている場合、Amazon Cognito は**認証チャレンジの定義**後にこのトリガーを呼び出します。これにより、[カスタム認証フロー](https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-authentication-flow.html#amazon-cognito-user-pools-custom-authentication-flow)を作成します。

この Lambda トリガーは、ユーザーに提示するチャレンジを作成するために呼び出されます。この Lambda トリガーのリクエストには `challengeName` と `session` が含まれます。`challengeName` は文字列であり、ユーザーに対する次のチャレンジの名前です。この属性の値は、認証チャレンジの定義の Lambda トリガーに設定されています。

チャレンジループは、すべてのチャレンジに応答するまで繰り返されます。

**Topics**
+ [認証チャレンジの作成 Lambda トリガーパラメータ](#cognito-user-pools-lambda-trigger-syntax-create-auth-challenge)
+ [認証チャレンジの作成の例](#aws-lambda-triggers-create-auth-challenge-example)

## 認証チャレンジの作成 Lambda トリガーパラメータ
<a name="cognito-user-pools-lambda-trigger-syntax-create-auth-challenge"></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",
            . . .
        },
        "challengeName": "string",
        "session": [
            ChallengeResult,
            . . .
        ],
        "clientMetadata": {
            "string": "string",
            . . .
        },
        "userNotFound": boolean
    },
    "response": {
        "publicChallengeParameters": {
            "string": "string",
            . . .
        },
        "privateChallengeParameters": {
            "string": "string",
            . . .
        },
        "challengeMetadata": "string"
    }
}
```

------

### 認証チャレンジの作成のリクエストパラメータ
<a name="cognito-user-pools-lambda-trigger-syntax-create-auth-challenge-request"></a>

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

**userNotFound**  
このブール値は、ユーザープールクライアントで `PreventUserExistenceErrors` が `ENABLED` に設定されている場合に設定されます。

**challengeName**  
新しいチャレンジの名前。

**session**  
session 要素は `ChallengeResult` 要素の配列であり、それぞれに以下の要素が含まれます。    
**challengeName**  
チャレンジタイプ。`"CUSTOM_CHALLENGE"`、`"PASSWORD_VERIFIER"`、`"SMS_MFA"`、`"DEVICE_SRP_AUTH"`、`"DEVICE_PASSWORD_VERIFIER"`、`"NEW_PASSWORD_REQUIRED"`、または `"ADMIN_NO_SRP_AUTH"` のいずれか。  
**challengeResult**  
ユーザーが正常にチャレンジを完了した場合は `true` に、それ以外の場合は `false` に設定します。  
**challengeMetadata**  
カスタムチャレンジの名前を入力します。`challengeName` が `"CUSTOM_CHALLENGE"` である場合にのみ使用されます。

**clientMetadata**  
認証チャレンジの作成のトリガーに指定する Lambda 関数へのカスタム入力として提供できる 1 つ、または複数のキー/値ペア。このデータは、[AdminRespondToAuthChallenge](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminRespondToAuthChallenge.html) および [RespondToAuthChallenge](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_RespondToAuthChallenge.html) API アクションで ClientMetadata パラメータを使用することによって Lambda 関数に渡すことができます。create auth challenge 関数を呼び出すリクエストに、[AdminInitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminInitiateAuth.html) および [InitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html) API オペレーションで ClientMetadata パラメータに渡されたデータは含まれません。

### 認証チャレンジの作成のレスポンスパラメータ
<a name="cognito-user-pools-lambda-trigger-syntax-create-auth-challenge-response"></a>

**publicChallengeParameters**  
クライアントアプリケーションでユーザーに提示されるチャレンジに使用する 1 つ以上のキー - 値ペア。このパラメータには、ユーザーにチャレンジを正確に提示するために必要なすべての情報を含める必要があります。

**privateChallengeParameters**  
このパラメータは、認証チャレンジレスポンスの検証の Lambda トリガー以外では使用されません。このパラメータには、チャレンジに対するユーザーのレスポンスを検証するために必要な情報のすべてを含める必要があります。つまり、`publicChallengeParameters` には、ユーザーに示される質問が含まれ、`privateChallengeParameters` には、質問に対する有効な回答が含まれます。

**challengeMetadata**  
カスタムチャレンジの名前 (カスタムチャレンジの場合)。

## 認証チャレンジの作成の例
<a name="aws-lambda-triggers-create-auth-challenge-example"></a>

この関数には、[認証チャレンジの定義例](user-pool-lambda-define-auth-challenge.md#aws-lambda-triggers-define-auth-challenge-example)のチャレンジシーケンスに対応する 2 つのカスタムチャレンジがあります。最初の 2 つのチャレンジは SRP 認証です。3 番目のチャレンジの場合、この関数はチャレンジレスポンスで CAPTCHA URL をアプリケーションに返します。アプリケーションは、指定された URL で CAPTCHA をレンダリングし、ユーザーの入力を返します。CAPTCHA イメージの URL が "`captchaUrl`" としてパブリックチャレンジパラメータに追加され、想定される回答がプライベートチャレンジパラメータに追加されます。

4 番目のチャレンジの場合、この関数はセキュリティの質問を返します。アプリケーションは質問をレンダリングし、ユーザーに回答を求めます。ユーザーが両方のカスタムチャレンジを解決すると、認証チャレンジの定義トリガーは、ユーザープールがトークンを発行できることを確認します。

------
#### [ Node.js ]

```
const handler = async (event) => {
  if (event.request.challengeName !== "CUSTOM_CHALLENGE") {
    return event;
  }

  if (event.request.session.length === 2) {
    event.response.publicChallengeParameters = {};
    event.response.privateChallengeParameters = {};
    event.response.publicChallengeParameters.captchaUrl = "url/123.jpg";
    event.response.privateChallengeParameters.answer = "5";
  }

  if (event.request.session.length === 3) {
    event.response.publicChallengeParameters = {};
    event.response.privateChallengeParameters = {};
    event.response.publicChallengeParameters.securityQuestion =
      "Who is your favorite team mascot?";
    event.response.privateChallengeParameters.answer = "Peccy";
  }

  return event;
};

export { handler };
```

------