avatar

Tetsuya Ohira's Blog

Software Developer in Japan 🚀

Amazon Cognitoの認証をcurlで試す

2024-07-29

はじめに

  • Amazon Cognitoを使った認証基盤の構築で、動作確認のためcurlで認証を試したい場合がある
  • 何度も実行するため、備忘録として残しておく。
  • なお、Amazon Cognitoの設定やユーザープールの作成については割愛する。

curlでAmazon Cognitoの認証を試す

事前準備

  • AWSマネジメントコンソールからClient IDClient Secretを取得しておく

認証リクエスト

  • パラメタには、Secret Hashが必要なので、Secret Hashを生成する
CLIENT_ID="<YOUR_CLIENT>" CLIENT_SECRET="<YOUR_SECRET>" EMAIL="<YOUR_EMAIL>" echo -n "$EMAIL$CLIENT_ID" | openssl dgst -sha256 -hmac "$CLIENT_SECRET" -binary | base64
  • Secret Hashを生成したら、以下のリクエストを送信する
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": "<YOUR_CLIENT>", "AuthFlow": "USER_PASSWORD_AUTH", "AuthParameters":{ "USERNAME": "<YOUR_EMAIL>", "PASSWORD": "<YOUR_PASSWORD", "SECRET_HASH": "<CREATED_SECRET_HASH>" }}'
  • 実行結果
{ "AuthenticationResult": { "AccessToken": "accessToken", "ExpiresIn": 3600, "IdToken": "idToken", "RefreshToken": "refreshToken", "TokenType": "Bearer" }, "ChallengeParameters": {} }

リフレッシュトークンリクエスト

  • リフレッシュトークンを使って、アクセストークンを再取得する
  • Secret Hashの生成では、emailではなくsubを使うので注意
CLIENT_ID="<YOUR_CLIENT>" CLIENT_SECRET="<YOUR_SECRET>" SUB="<YOUR_SUB>" echo -n "$SUB$CLIENT_ID" | openssl dgst -sha256 -hmac "$CLIENT_SECRET" -binary | base64
  • Secret Hashを生成したら、以下のリクエストを送信する
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": "<YOUR_CLIENT>", "AuthFlow": "REFRESH_TOKEN_AUTH", "AuthParameters": { "REFRESH_TOKEN": "<YOUR_REFRESH_TOKEN>", "SECRET_HASH": "<CREATED_SECRET_HASH>" }}'

参考