Hybridフロー
フロー図

フロー説明
Step0. Discovery <クライアント/サーバー共通>
OpenID Configurationエンドポイントにリクエストして各エンドポイントのURIとサポート機能を確認します。
Step1. ユーザー認証リクエスト <クライアント/サーバー共通>
AuthorizationエンドポイントにリクエストしてAccess Token/ID Token/認可コードを取得します。
- クライアントはユーザーの認可を得るため、ユーザーをAuthorizationエンドポイントへリダイレクトさせます。
- Authorizationエンドポイントはユーザーを認証して、クライアントがアクセスする権限を与えることについてユーザーに確認をとります。
- ユーザーによる認可が得られた場合、事前に登録された戻り先URLへユーザーをリダイレクトさせ、Access Token/ID Token/認可コード及び指定されたstateをクライアントに渡します。
- クライアントは認可リクエスト時に送信したstateと渡されたstateが同一かどうか確認します。
Step2. Access Token/ID Token/認可コード抽出 <クライアントサイド>
クライアントはリダイレクトURIのフラグメントから、クライアントサイドで利用するためのAccess TokenとID Tokenを、サーバーサイドでAccess Tokenを発行するための認可コードを抽出します。
Step3. ID Token検証 <クライアントサイド>
クライアントはJWKsエンドポイントもしくはPublic KeysエンドポイントにリクエストしてID Token検証に必要な情報を取得し、ID Tokenを検証します。
Step4. ウェブAPIアクセス <クライアントサイド>
- クライアントはAccess Tokenを使ってウェブAPIのエントリーポイントへリクエストを送信します。
- ウェブAPIはAccess Tokenが有効な場合、正常なレスポンスを返却します。Access Tokenが無効な場合はエラーレスポンスを返却します。
- クライアントは取得したレスポンスをもとに処理を継続します。
Step5. Access Token要求(発行)<サーバーサイド>
サーバーサイドアプリはTokenエンドポイントにリクエストしてAccess Token/Refresh Token/ID Tokenを発行します。
Step6. ID Token検証 <サーバーサイド>
サーバーサイドアプリはJWKsエンドポイントもしくはPublic KeysエンドポイントにリクエストしてID Token検証に必要な情報を取得し、ID Tokenを検証します。
Step7. ウェブAPIアクセス <サーバーサイド>
- サーバーサイドアプリはAccess Tokenを使ってウェブAPIのエントリーポイントへリクエストを送信します。
- ウェブAPIはAccess Tokenが有効な場合、正常なレスポンスを返却します。Access Tokenが無効な場合はエラーレスポンスを返却します。
- サーバーサイドアプリは取得したレスポンスをもとに処理を継続します。
Step8. Access Token要求(更新)<サーバーサイド>
サーバーサイドアプリはTokenエンドポイントにリクエストしてAccess Tokenを更新します。
Access Token要求について
Access Token発行
- クライアントは認可コードを使って、Tokenエンドポイントへリクエストを送信します。この際、事前に発行してあるシークレットでBasic認証を行います。
- Tokenエンドポイントはクライアントを認証し、Access TokenとRefresh Tokenを返却します。要求があった場合はID Tokenも一緒に返却します。ID Tokenに関しましてはこちらをご覧ください。
- クライアントは取得したAccess TokenとRefresh Tokenを後で利用するため安全に保存します。ID連携を行う場合はAccess Tokenと一緒に取得したid_tokenからユーザー識別子を取得するか、UserInfoAPIからユーザー識別子を取得し、ユーザー識別子をキーにRefresh Tokenを保存してください。クライアント独自のIDがある場合は必要に応じてユーザー識別子と独自のIDの関連付け処理を行ってください。
Access Token更新
- Access Tokenの有効期限が切れた場合、クライアントは保存しておいたRefresh Tokenを用いてTokenエンドポイントへリクエストを送信します。この際、事前に発行してあるシークレットでBasic認証を行います。
- Tokenエンドポイントはクライアントを認証し、新しいAccess Tokenを返却します。クライアントから渡されたRefresh Tokenの有効期限が切れていた場合はエラーを返却します。
- クライアントは新しいAccess Tokenを取得し、期限切れのAccess Tokenと置き換えます。Refresh Tokenの期限切れでエラーが返却された場合は、1のフローからやり直して、ユーザーの認可を取り直す必要があります。
