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 のアクセストークンなどを取得するまでのフローを試してみました。
どなたかの参考になれば幸いです。