得られた認可コードをトークンエンドポイントに送りトークンを得るために、以下の ⑤ を curl で行います。
サーバサイドアプリケーションの代わりに、curl でトークンエンドポイントに認可コードを送ります。
ターミナルや Powershell で以下の内容を < >
部分を書き換えて入力て実行します。<domain-name>
は Cognito に割り当てたドメイン名に置き換えます。Cognito ドメイン名を設定 で設定しました。<app-client-id>
は 2 箇所あり、両方をアプリクライアントのうち Confidential クライアントのアプリクライアント ID に置き換えます。<app-client-secret>
は同じアプリクライアントのシークレットで置き換えます。<auth-code>
はブラウザのアドレスバーからコピーした認可コードに置き換えます。
curl --location \
--request POST 'https://<domain-name>.auth.ap-northeast-1.amazoncognito.com/token' \
-u <app-client-id>:<app-client-secret> \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'grant_type=authorization_code' \
--data-urlencode 'client_id=<app-client-id>' \
--data-urlencode 'redirect_uri=http://localhost/' \
--data-urlencode 'code=<auth-code>'
C:\Windows\System32\curl.exe --location `
--request POST 'https://<domain-name>.auth.ap-northeast-1.amazoncognito.com/token' `
-u <app-client-id>:<app-client-secret> `
--header 'Content-Type: application/x-www-form-urlencoded' `
--data-urlencode 'grant_type=authorization_code' `
--data-urlencode 'client_id=<app-client-id>' `
--data-urlencode 'redirect_uri=http://localhost/' `
--data-urlencode 'code=<auth-code>' `
成功した場合の出力を整形すると以下のような複数の種類のトークンが含まれた JSON となっています。id_token
に ID トークン、access_token
にアクセストークン、refresh_token
にリフレッシュトークンが含まれています。パラメータ間違い以外にエラーになる原因として、認可コードの有効期限切れがあります。サインインして時間が経ってしまっている場合は、サインインからやり直してください。
{
"id_token": "?????.?????.?????",
"access_token": "?????.?????.?????",
"refresh_token": "?????????????????",
"expires_in": 3600,
"token_type": "Bearer"
}
これで Auth API を使ったサインインの操作は行えました。得られたトークンのうち、id_token
、access_token
を jwt.io のサイトでデコードして、内容を確認します。
トークンエンドポイントの呼び出し結果から id_token
の値をコピーします。” は含めず、” と “ に囲まれた文字列をコピーします。id_token
を見つけるのが難しい場合は、呼び出し結果全体を jsonlint.com に貼り付けて、 [Validate JSON] をクリックして整形してください。
https://jwt.io/ をブラウザで開いてください。以下のような入力画面が表示されるまで、下にスクロールしてください。最初はサンプルが入力されています。
[Encoded] にコピーした id_token
の値を貼り付けます。[Decoded] の [PAYLOAD] にトークンの中身が表示されます。
トークンエンドポイントの呼び出し結果から access_token
の値をコピーします。こちらも “ は含めず、” と “ に囲まれた文字列をコピーします。access_token
を見つけるのが難しい場合は、呼び出し結果全体を jsonlint.com に貼り付けて、 [Validate JSON] をクリックして整形してください。
https://jwt.io/ で、[Encoded] にコピーした access_token
の値を貼り付けます。[Decoded] の [PAYLOAD] にトークンの中身が表示されます。
理解を深めるために、以下も試してみてください。
得られたトークンは 3. Cognito Identity Provider API の REST API アクセスでも利用できます。
一度 1-4. 認可エンドポイント を実施した後に、ブラウザを閉じずにもう一度認可エンドポイントを開くと、サインインせずにすぐにコールバック URL へリダイレクトされます。
コールバック URL を変更して、認可エンドポイントを開くとエラーになります。アプリクライアントのコールバック URL 設定に ";"
区切りで URL を追加すれば、利用できるようになります。