Auth API の Authorization Code Grant フローでの呼び出しを Confidential クライアントから行います。Hosted UI を使うことになるため、ブラウザでのインタラクティブな操作が必要です。また、一般的には Confidential クライアントはシークレットがあるため、サーバサイドから呼び出しが出てきます。
本ハンズオンでは、ブラウザでの直接アクセス、Postman、curl コマンドを操作してトークン発行までを行います。
本ハンズオンでは ① でアクセスします。サインするためのエンドポイントで、開くと通常は Hosted UI が表示されます。サインインのみならず、ユーザ登録、確認コードの入力、パスワード忘れ時の対応、外部 IdP を使ったサインインなども行なえます。ユーザに行わせたい ID 関連の操作すべてを Hosted UI で行えるわけではないため、Cognito Identity Provider API も併用することが必要です。
このエンドポイントはブラウザで開きインタラクティブで操作することが前提でなっており、サインインが行えると、指定されたリダイレクト先にリダイレクトされます。API へのパラメータは、URL パラメータで送ります。
GET /oauth2/authorize
主なリクエストパラメータ
項目 | 意味 |
---|---|
response_type | 利用したい OAuth フローを指定します。code は Authorization Code Grant フローで、token は Implicit Grant フローを意味します。 |
client_id | アプリクライアント ID |
redirect_uri | サインイン後にリダイレクトする先のアプリ URL |
他にもいくつかパラメータがあるため、詳しくは Cognito 開発者ガイド - 認可エンドポイント を確認ください。特に、実利用ではセキュリティ強化のため code_challenge
、state
も利用することが望ましいです。
本ハンズオンでは ⑤ でアクセスします。トークンエンドポイントは名前の通り、トークンを提供します。ハンズオンで行う Authorization Code Grant フローで使う場合は、サインイン後に得られた認可コードを送ることでトークンを得られます。加えて、リフレッシュトークンを送って新しいアクセストークン、ID トークンを得る使い方や Client Credetial フローでアプリクライアントとして認証することでトークンを得ることも可能です。
このエンドポイントはクライアントのバックグラウンドで呼び出す場合もサーバからアクセスする場合もあります。成功してもリダイレクトのレスポンスは返ってきません。API へのパラメータは、リクエストボディに URL エンコードして送ります。
POST /oauth2/token
主なリクエストパラメータ
項目 | 意味 |
---|---|
grant_type | トークン提供可否を確認する方法を指定します。authorization_code では認可コード、refresh_token ではリフレッシュトークン、client_credentials ではアプリクライアントのシークレットで確認します。 |
client_id | アプリクライアントの ID |
redirect_uri | authorization_code の時に認可コード発行時に利用されたリダイレクト URL を指定します。 |
code | authorization_code の時に認可コードを指定します。 |