kakakakakku blog

Weekly Tech Blog: Keep on Learning!

curl で Cognito User Pool のトークンエンドポイントにリクエストを送信する

Cognito User Pool の「トークンエンドポイント」からトークンを取得するリクエスト要件は以下のドキュメントにまとまっている📝 検証のために curl でトークンエンドポイントにリクエストを送信する機会があって,今後再利用できそうだからコマンドの雛形を残しておくことにした❗️

docs.aws.amazon.com

パラメータ紹介

パラメータは複数あるけど今回使う代表的なものを列挙しておく〜

  • grant_type: 付与タイプ(authorization_coderefresh_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_idclient_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_idclient_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 リファレンスは以下にまとまっている📝

OAuth 2.0 関連は「OAuth 徹底入門」にまとまっていて,仕組みや用語の理解を整理するのに助かった📕