Amazon Cognitoの認証をcurlで試す
2024-07-29
はじめに
- Amazon Cognitoを使った認証基盤の構築で、動作確認のためcurlで認証を試したい場合がある
- 何度も実行するため、備忘録として残しておく。
- なお、Amazon Cognitoの設定やユーザープールの作成については割愛する。
curlでAmazon Cognitoの認証を試す
事前準備
- AWSマネジメントコンソールから
Client ID
とClient 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>" }}'