3. curl で InitiateAuth

確認まで行ったユーザで IntiateAuth を使ってユーザ認証を行います。

ユーザ認証 (InitiateAuth)

ターミナルや Powershell で以下の内容を < > 部分を書き換えて入力して実行します。<app-client-id> は 2 章で作成した Cognito アプリクライアントの ID です。Public クライアントを使用します。<mail-address><password> には先程登録したユーザ情報を入力してください。

Mac / Linux の場合
curl --location \
--request POST 'https://cognito-idp.ap-northeast-1.amazonaws.com/' \
--header 'Content-Type: application/x-amz-json-1.1' \
--header 'X-Amz-Target: AWSCognitoIdentityProviderService.InitiateAuth' \
--data-raw '
{
    "ClientId": "<app-client-id>",
    "AuthFlow": "USER_PASSWORD_AUTH",
    "AuthParameters":
    {
        "USERNAME": "<mail-address>",
        "PASSWORD": "<password>"
    }
}
'
Windows Powershell の場合
C:\Windows\System32\curl.exe --location `
--request POST 'https://cognito-idp.ap-northeast-1.amazonaws.com/' `
--header 'Content-Type: application/x-amz-json-1.1' `
--header 'X-Amz-Target: AWSCognitoIdentityProviderService.InitiateAuth' `
--data-raw @'
{
    \"ClientId\": \"<app-client-id>\",
    \"AuthFlow\": \"USER_PASSWORD_AUTH\",
    \"AuthParameters\":
    {
        \"USERNAME\": \"<mail-address>\",
        \"PASSWORD\": \"<password>\"
    }
}
'@

成功した場合の出力を整形すると以下のような内容となっています。

{
    "AuthenticationResult": {
        "AccessToken": "?????.?????.?????",
        "ExpiresIn": 3600,
        "IdToken": "?????.?????.?????",
        "RefreshToken": "?????????????????",
        "TokenType": "Bearer"
    },
    "ChallengeParameters": {}
}

アクセストークン確認

アクセストークンの内容を確認します。InitiateAuth の呼び出し結果から AccessToken の値をコピーします。” は含めず、” と “ に囲まれた文字列をコピーします。

https://jwt.io/ をブラウザで開いてください。

以下のような入力画面が表示されるまで、下にスクロールしてください。最初はサンプルが入力されています。

[Encoded] にコピーした AccessToken の値を貼り付けます。[Decoded] の [PAYLOAD] にトークンの中身が表示されます。[username] は Cognito 上のユーザ名です。今回はユーザからはメールアドレスをユーザ名のように扱う前提で、ユーザ名を指定していないため、ランダムな文字列が生成されて割り当てられています。ユーザにとってユーザ名であるメールアドレスはアクセストークンに含まれていません。また、 [Encoded] にある貼り付けた文字列が 3 色で塗り分けられており、[Decoded] のどこの部分かを表しています。

ID トークン確認

InitiateAuth の呼び出し結果から IdToken の値をコピーします。こちらも “ は含めず、” と “ に囲まれた文字列をコピーします。

https://jwt.io/ で、[Encoded] にコピーした IdToken の値を貼り付けます。[Decoded] の [PAYLOAD] にトークンの中身が表示されます。アクセストークンと同じ内容も含まれていますが、いくつか異なっており、特にメールアドレスなどユーザの属性が含まれています。