Cognito のアクセストークンなどを取得するまでのフローを試してみた
Identity provider and relying party endpoints - Amazon Cognito
認可エンドポイント > トークンエンドポイントの流れでアクセストークンなどを取得してみました。
なお、リクエストは Postman から行いました。
01. Cognito ユーザープールの作成
以下の設定でユーザープールを作成します。
- アプリケーションタイプ: 従来のウェブアプリケーション
- サインイン識別子のオプション: メールアドレス
上記以外はデフォルト設定です。

02. ユーザーの作成
サインインに使用するユーザーを作成しておきます。
手順 01 で作成したユーザープール > ユーザー > ユーザーを作成をクリックします。

E メールアドレスとパスワードを入力して「ユーザーを作成」をクリックします。

ユーザーの作成後、アプリケーションクライアント > 手順 01 でユーザープール作成時に自動的に作成されたアプリケーションクライアントをクリックします。

ログインページ > ログインページを表示をクリックします。

上記手順で作成したユーザーの E メールアドレスとパスワードでサインインします。
初回のサインインではパスワードの変更を求められるのでパスワードを変更します。



サインインが成功するとデフォルトの許可されているコールバック URL に遷移します。

03. 認可エンドポイントへのリクエスト
The redirect and authorization endpoint - Amazon Cognito
To use the authorize endpoint, invoke your user's browser at /oauth2/authorize with parameters that provide your user pool with information about the following user pool details.
Cognito の認可エンドポイントは以下の形式です。
https://<Cognito ドメイン>/oauth2/authorize
Cognito のデフォルトドメインについてはユーザープール > ドメインから確認できます。

上記エンドポイントに対して必要なパラメータを付与したうえでリクエストします。
今回は以下のようなリクエストパラメータを付与します。
- response_type: code
- client_id: Cognito アプリケーションクライアントのクライアント ID
- redirect_uri: マネージドログインのデフォルトの許可されているコールバック URL
- state: abcdefg
- scope: email+openid+phone
上記パラメータを Postman で設定してリクエストを送信します。

Status が 200 OK で Preview でサインインページが表示されていればリクエスト成功です。

後述の手順で認可コードが必要になるため、上記リクエストパラメーターが付与された URL を Postman からコピーし、ブラウザで URL へアクセスします。
今回はサインインから試したかったのでブラウザのシークレットモードで URL へアクセスしました。
サインイン画面が表示されたら手順 02 で作成したユーザー情報でサインインします。

サインイン後、URL に認可コードが含まれていれば OK です。

サインイン後の URL を Postman に入力するとよりわかりやすいです。
code の値の文字列が認可コードです。

04. トークンエンドポイントへのリクエスト
The token issuer endpoint - Amazon Cognito
The OAuth 2.0 token endpoint at /oauth2/token issues JSON web tokens (JWTs) to applications that want to complete authorization-code and client-credentials grant flows.
Cognito のトークンエンドポイントは以下の形式です。
https://<Cognito ドメイン>/oauth2/token
上記エンドポイントに対して必要なパラメータを付与したうえでリクエストします。
今回は以下のようなリクエストパラメータを付与します。
- code: 手順 03 で取得した認可コード
- client_id: Cognito アプリケーションクライアントのクライアント ID
- client_secret: Cognito アプリケーションクライアントのクライアントシークレット
- grant_type: authorization_code
- redirect_uri: マネージドログインのデフォルトの許可されているコールバック URL

また、以下のヘッダーも追加します。
- Content-Type: application/x-www-form-urlencoded

リクエストは POST メソッドで行います。
Status が 200 OK で以下の情報を取得できれば成功です。
- id_token
- access_token
- refresh_token
- expires_in
- token_type

まとめ
今回は Cognito のアクセストークンなどを取得するまでのフローを試してみました。
どなたかの参考になれば幸いです。







