🔖
Cognito User Pool で Client Credentials flow を curl で試す方法
これは何?
- Cognito User Pool で Client Credentials flow を使う
- curl で Token Endpoint にリクエストしてアクセストークンを取得する方法のメモ
前提
- Cognito User Pool を作成してドメインを設定
- リソースサーバーを設定してカスタムスコープを設定
- シークレットを含むアプリクライアントを作成
設定方法についてはドキュメントに手順あり
curl で Token Endpoint にリクエストする例
DOMAIN=https://sample.auth.ap-northeast-1.amazoncognito.com
APP_CLIENT_ID=xxx
APP_CLIENT_SECRET=yyy
curl -s -X POST ${DOMAIN}/oauth2/token \
-H "Authorization: Basic $(echo -n ${APP_CLIENT_ID}:${APP_CLIENT_SECRET} | base64 )" \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "grant_type=client_credentials" \
-d "client_id=${APP_CLIENT_ID}"
Reference
リクエスト結果の例
{
"access_token": "eyJ...",
"expires_in": 3600,
"token_type": "Bearer"
}
ID Token, Refresh Token は無しで Access Token のみ。
Access Token の Payload は以下のようになっている。
{
"sub": "xxx",
"token_use": "access",
"scope": "sample/read",
"auth_time": 1633781133,
"iss": "https://cognito-idp.ap-northeast-1.amazonaws.com/ap-northeast-1_zzz",
"exp": 1633784733,
"iat": 1633781133,
"version": 2,
"jti": "39cdbc77-8743-4e1e-9669-96e62b165f1c",
"client_id": "xxx"
}
特徴的なのは sub と client_id が同じになる点。
これはそもそも Client Credentials flow では特定ユーザーを対象としないため、使用したアプリクライアント ID がそのまま sub として扱われるようになっている様子。
何に使えるのか
- Cognito User Pool を使っていて、システム間連携したい場合
- 一方で Amazon API Gateway を利用予定なら、 IAM を使ってアクセスコントロールしたほうがシンプルかもしれない
- OAuth, OIDC に関する既存のライブラリ資産等があり、諸々の事情によって使わざるを得ない場合
Discussion