Cognito User Pool の「トークンエンドポイント」からトークンを取得するリクエスト要件は以下のドキュメントにまとまっている📝 検証のために curl でトークンエンドポイントにリクエストを送信する機会があって,今後再利用できそうだからコマンドの雛形を残しておくことにした❗️
パラメータ紹介
パラメータは複数あるけど今回使う代表的なものを列挙しておく〜
grant_type
: 付与タイプ(authorization_code
やrefresh_token
など)client_id
: Amazon Cognito User Pool のアプリケーションクライアント(クライアント ID)client_secret
: Amazon Cognito User Pool のアプリケーションクライアント(クライアントシークレット)code
: 認可エンドポイント(/oauth2/authorize
)から取得した認可コードredirect_uri
: リダイレクト URL
🔑 トークン取得
クライアント認証方式: client_secret_basic
Authorization
ヘッダーには Basic 認証として client_id:client_secret
を Base64 エンコードした値を設定する👌
$ ENDPOINT=https://xxx.auth.ap-northeast-1.amazoncognito.com/oauth2/token $ CLIENT_ID=xxx $ CLIENT_SECRET=xxx $ CODE=xxx $ REDIRECT_URI=xxx $ curl ${ENDPOINT} \ -H "Authorization: Basic $(echo -n ${CLIENT_ID}:${CLIENT_SECRET} | base64)" \ -d grant_type=authorization_code \ -d code=${CODE} \ -d redirect_uri=${REDIRECT_URI}
暗黙的に決まる HTTP メソッド POST
と Content-Type ヘッダー application/x-www-form-urlencoded
は省略したけど,コマンドからイメージしやすいように明示的に指定して実行するなら以下で OK👌
$ curl -X POST ${ENDPOINT} \ -H 'Content-Type: application/x-www-form-urlencoded' \ -H "Authorization: Basic $(echo -n ${CLIENT_ID}:${CLIENT_SECRET} | base64)" \ -d grant_type=authorization_code \ -d code=${CODE} \ -d redirect_uri=${REDIRECT_URI}
クライアント認証方式: client_secret_post
Authorization
ヘッダーを付けずに client_id
と client_secret
をパラメータとして設定することもできる👌
$ ENDPOINT=https://xxx.auth.ap-northeast-1.amazoncognito.com/oauth2/token $ CLIENT_ID=xxx $ CLIENT_SECRET=xxx $ CODE=xxx $ REDIRECT_URI=xxx $ curl ${ENDPOINT} \ -d grant_type=authorization_code \ -d client_id=${CLIENT_ID} \ -d client_secret=${CLIENT_SECRET} \ -d code=${CODE} \ -d redirect_uri=${REDIRECT_URI}
イメージしやすく明示的に指定して実行するなら以下で OK👌
$ curl -X POST ${ENDPOINT} \ -H 'Content-Type: application/x-www-form-urlencoded' \ -d grant_type=authorization_code \ -d client_id=${CLIENT_ID} \ -d client_secret=${CLIENT_SECRET} \ -d code=${CODE} \ -d redirect_uri=${REDIRECT_URI}
🔑 トークン更新
クライアント認証方式: client_secret_basic
Authorization
ヘッダーには Basic 認証として client_id:client_secret
を Base64 エンコードした値を設定する👌
$ ENDPOINT=https://xxx.auth.ap-northeast-1.amazoncognito.com/oauth2/token $ CLIENT_ID=xxx $ CLIENT_SECRET=xxx $ CODE=xxx $ REDIRECT_URI=xxx $ REFRESH_TOKEN=xxx $ curl ${ENDPOINT} \ -H "Authorization: Basic $(echo -n ${CLIENT_ID}:${CLIENT_SECRET} | base64)" \ -d grant_type=refresh_token \ -d code=${CODE} \ -d redirect_uri=${REDIRECT_URI} \ -d refresh_token=${REFRESH_TOKEN}
イメージしやすく明示的に指定して実行するなら以下で OK👌
$ curl -X POST ${ENDPOINT} \ -H 'Content-Type: application/x-www-form-urlencoded' \ -H "Authorization: Basic $(echo -n ${CLIENT_ID}:${CLIENT_SECRET} | base64)" \ -d grant_type=refresh_token \ -d code=${CODE} \ -d redirect_uri=${REDIRECT_URI} \ -d refresh_token=${REFRESH_TOKEN}
クライアント認証方式: client_secret_post
Authorization
ヘッダーを付けずに client_id
と client_secret
をパラメータとして設定することもできる👌
$ ENDPOINT=https://xxx.auth.ap-northeast-1.amazoncognito.com/oauth2/token $ CLIENT_ID=xxx $ CLIENT_SECRET=xxx $ CODE=xxx $ REDIRECT_URI=xxx $ REFRESH_TOKEN=xxx $ curl ${ENDPOINT} \ -d grant_type=refresh_token \ -d client_id=${CLIENT_ID} \ -d client_secret=${CLIENT_SECRET} \ -d code=${CODE} \ -d redirect_uri=${REDIRECT_URI} \ -d refresh_token=${REFRESH_TOKEN}
イメージしやすく明示的に指定して実行するなら以下で OK👌
$ curl -X POST ${ENDPOINT} \ -H 'Content-Type: application/x-www-form-urlencoded' \ -d grant_type=refresh_token \ -d client_id=${CLIENT_ID} \ -d client_secret=${CLIENT_SECRET} \ -d code=${CODE} \ -d redirect_uri=${REDIRECT_URI} \ -d refresh_token=${REFRESH_TOKEN}
関連情報
Amazon Cognito User Pool でフェデレーションを設定するときに関連する API リファレンスは以下にまとまっている📝
/oauth2/authorize
/oauth2/token
/oauth2/userInfo
/oauth2/revoke
OAuth 2.0 関連は「OAuth 徹底入門」にまとまっていて,仕組みや用語の理解を整理するのに助かった📕