curlでcognito oauth2認証
久しぶり、かつpythonで実装して超めんどくさかったのでメモ。
はまらなければすぐできると思う。
Authorization Code Grantの流れ
- cognito hosted uiでログイン
- サーバーのアプリでredirectを受け付ける
- 認可コードをtoken endpoint(xxxx.amazoncognito.com/oauth2/token)に送る
- id_token, refresh_token, access_tokenを取得
- 有効期限が切れたら refresh_token を使用して token をrefresh
この辺を見れば分かる
token取得
curl -X "POST" "https://{domain}.auth.us-east-1.amazoncognito.com/oauth2/token" \ -H 'Content-Type: application/x-www-form-urlencoded' \ --data-urlencode "grant_type=authorization_code" \ --data-urlencode "client_id=xxxxx" \ --data-urlencode "client_secret=xxx" \ --data-urlencode "code=xxxx" \ --data-urlencode "redirect_uri=https://{redirect_url}"
token refresh
curl -X "POST" "https://{domain}.auth.us-east-1.amazoncognito.com/oauth2/token" \ -H 'Content-Type: application/x-www-form-urlencoded' \ --data-urlencode "grant_type=refresh_token" \ --data-urlencode "client_id=xxxx" \ --data-urlencode "client_secret=xxxx" \ --data-urlencode "refresh_token=xxxx"
optionalでnonceも送る。