CognitoユーザープールのIDトークンのクレームに新しい値を追加してみる

CognitoではいろいろなフェーズでLambda関数をトリガーして実行することが可能です。CognitoのIDトークンのクレームをカスタマイズするためのトークン生成前Lambdaトリガーを利用して、CognitoのIDトークンに新しい値を追加してみます。
2020.07.29

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

CognitoユーザープールはいろいろなフェーズでLambda関数をトリガーして実行することが可能です。

Cognitoの IDトークン のクレームをカスタマイズできるように、 トークン生成前Lambdaトリガー という機能が用意されています。

これを利用して、Cognitoの IDトークン に新しい値を追加してみます。

前提条件

Cognitoでログインした後、 IDトークン を確認できるような環境はすでに構築済みであることを前提とします。

先日書いたこのブログの環境を流用します。

現在のIDトークンを確認する

まずは通常のIDトークンを確認してみます。

ローカルでCognitoログインできる環境を動かして、ページにアクセスします。

Cognitoのログイン画面でEmail/パスワードを入力してログインします。

そうすると、こんな感じでIDトークンに入っているユーザー情報が表示されます。

Cognitoの IDトークン 含む各種トークンについては、以前ブログを書きましたので詳細はこちらをご参照ください。

Cognitoトリガー用のLambdaを作成する

IDトークンに新しい値を追加するためのLambdaを適当な名前で作成します。今回は CognitoPreTokenGeneration という名前にしています。ランタイムは Node.js 12.x としています。

公式ドキュメントを参照すると、トークン生成前のLambdaトリガーで response 内の claimsToAddOrOverride にクレームのキーと値を設定することで、IDトークンにクレームを追加できるようです。

よって、Lambdaに次のコードを保存してIDトークンのクレームに固定値を追加するようにしてみます。

exports.handler = async (event) => {
    console.log(event);

    event.response = {
        "claimsOverrideDetails": {
            "claimsToAddOrOverride": {
                "my-attribute-key": "my-attribute-value"
            },
        }
    };

    // Return to Amazon Cognito
    return event;
};

Cognitoのトークン生成前のLambdaトリガーを設定する

Lambdaを構築したので、Cognitoのトークン生成前のLambdaトリガーを設定します。

マネジメントコンソールのCognitoユーザープールのこの画面で設定できます。

トークン生成前のトリガーに、先ほど構築したLambdaの CognitoPreTokenGeneration を選択して変更を保存します。

これで設定は完了です。

新しいクレームが追加されたIDトークンを確認する

IDトークンに新しいクレームが追加されているか、IDトークンを再取得して確認してみます。

再度ローカルでCognitoログインできる環境を動かして、ページにアクセスします。

Cognitoのログイン画面でEmail/パスワードを入力してログインします。

そうすると、こんな感じでIDトークンのクレームに、先ほど追加した my-attribute-key が含まれていることが確認できました。

終わりに

CognitoユーザープールのLambdaトリガーを実際に試してみました。

今回はIDトークンに固定値を追加しましたが、IDトークンを追加するロジックにLambdaを利用しているので、自分でコードを書けばユーザーに関する情報をどこかから取ってきてIDトークンに情報を埋め込むなんて使い方もできると思います。