What's?
AWS SDKやAWS CLIに頼らずに、HTTPでAmazon CognitoのAPIにアクセスできないかな?と思って調べていたら、どうやらできそうなのでメモ。
アクセスするAPIのリファレンス
こちらの一覧が対象です。
アクセス方法
以下の情報に沿って行います。
- HTTPエンドポイント …
https://cognito-idp.[リージョン].amazonaws.com
- HTTPメソッド …
POST
- 付与する必要があるHTTPヘッダー
Content-Type: application/x-amz-json-1.1
X-Amz-Target: AWSCognitoIdentityProviderService.[アクション名]
- HTTPボディ … APIに応じたJSON
サンプル(トークン更新)
サンプルとして、トークン更新を行ってみます。
使用するAPIは、こちら。
リフレッシュトークンを使って、アクセストークン、IDトークンを再取得する処理ですね。
この説明に沿って実施する感じになります。
ユーザープール API により新しい ID とアクセストークンを取得する際に、更新トークンを使用するには、API オペレーションの AdminInitiateAuth または InitiateAuth を使用します。AuthFlow パラメータの REFRESH_TOKEN_AUTH を渡します。認証パラメータの AuthParameters は、キーが "REFRESH_TOKEN" であり、値が実際の更新トークンであるキーバリューマップです。
X-Amz-Target
ヘッダーの値は、AWSCognitoIdentityProviderService.InitiateAuth
になります。
$ curl https://cognito-idp.ap-northeast-1.amazonaws.com \
-XPOST \
-H 'X-Amz-Target: AWSCognitoIdentityProviderService.InitiateAuth' \
-H 'Content-Type: application/x-amz-json-1.1' \
-d '{"ClientId":"[クライアントID]","AuthFlow":"REFRESH_TOKEN_AUTH","AuthParameters":{"REFRESH_TOKEN":"[リフレッシュトークン]"}}'
HTTPボディで送信するリクエストの内容は、InitiateAuth
のリクエストパラメーターの説明を見るとよいでしょう。
結果。
{"AuthenticationResult":{"AccessToken":"[アクセストークン]","ExpiresIn":[有効期限(秒)],"IdToken":"[IDトークン]","TokenType":"Bearer"},"ChallengeParameters":{}}
おわりに
これで、Amazon CognitoのエンドポイントへAWS SDKやAWS CLIなしでもアクセスできそうですね。