Yahoo! ID連携

Hybridフロー

フロー図

フロー説明

1. Discovery

OpenID Configurationエンドポイントにリクエストして各エンドポイントのURIとサポート機能を確認します。

2. ユーザー認証リクエスト

Authorizationエンドポイントにリクエストして認可コードを取得します。

JavaScriptのログインボタンを利用している場合には実装は不要です。

  1. クライアントはユーザーの認可を得るため、ユーザーをAuthorizationエンドポイントへリダイレクトさせます。
  2. Authorizationエンドポイントはユーザーを認証して、クライアントがアクセスする権限を与えることについてユーザーに確認をとります。
  3. ユーザーによる認可が得られた場合、事前に登録された戻り先URLへユーザーをリダイレクトさせ、認可コードと指定されたstateをクライアントに渡します。
  4. クライアントは認可リクエスト時に送信したstateと渡されたstateが同一かどうか確認します。

3. Access Token/ID Token/Authorization Code抽出

クライアントサイドで利用するためのAccess TokenとID Tokenを、サーバーサイドでAccess Tokenを発行するためのAuthoization Codeを抽出します。

4. ID Token検証

JWKsエンドポイントもしくはPublic KeysエンドポイントにリクエストしてID Token検証に必要な情報を取得し、ID Tokenを検証します。

5. ウェブAPIアクセス

  1. クライアントはAccess Tokenを使ってウェブAPIのエントリーポイントへリクエストを送信します。
  2. ウェブAPIはAccess Tokenが有効な場合、正常なレスポンスを返却します。Access Tokenが無効な場合はエラーレスポンスを返却します。
  3. クライアントは取得したレスポンスをもとに処理を継続します。

6. Access Token要求(発行)

TokenエンドポイントにリクエストしてAccess Token/Refresh Token/ID Tokenを発行します。

7. ID Token検証

JWKsエンドポイントもしくはPublic KeysエンドポイントにリクエストしてID Token検証に必要な情報を取得し、ID Tokenを検証します。

8. ウェブAPIアクセス

  1. クライアントはAccess Tokenを使ってウェブAPIのエントリーポイントへリクエストを送信します。
  2. ウェブAPIはAccess Tokenが有効な場合、正常なレスポンスを返却します。Access Tokenが無効な場合はエラーレスポンスを返却します。
  3. クライアントは取得したレスポンスをもとに処理を継続します。

9. Access Token要求(更新)

TokenエンドポイントにリクエストしてAccess Tokenを更新します。



Access Token要求について

Access Token発行

  1. クライアントは認可コードを使って、Tokenエンドポイントへリクエストを送信します。この際、事前に発行してあるシークレットでBasic認証を行います。
  2. Tokenエンドポイントはクライアントを認証し、Access TokenRefresh Tokenを返却します。要求があった場合はID Tokenも一緒に返却します。ID Tokenに関しましてはこちらをご覧ください。
  3. クライアントは取得したAccess TokenとRefresh Tokenを後で利用するため安全に保存します。ID連携を行う場合はAccess Tokenと一緒に取得したid_tokenからユーザー識別子を取得するか、UserInfoAPIからユーザー識別子を取得し、ユーザー識別子をキーにRefresh Tokenを保存してください。クライアント独自のIDがある場合は必要に応じてユーザー識別子と独自のIDの関連付け処理を行ってください。

Access Token更新

  1. Access Tokenの有効期限が切れた場合、クライアントは保存しておいたRefresh Tokenを用いてTokenエンドポイントへリクエストを送信します。この際、事前に発行してあるシークレットでBasic認証を行います。
  2. Tokenエンドポイントはクライアントを認証し、新しいAccess Tokenを返却します。クライアントから渡されたRefresh Tokenの有効期限が切れていた場合はエラーを返却します。
  3. クライアントは新しいAccess Tokenを取得し、期限切れのAccess Tokenと置き換えます。Refresh Tokenの期限切れでエラーが返却された場合は、1のフローからやり直して、ユーザーの認可を取り直す必要があります。


Yahoo!知恵袋で調べる