OAuth1.0

フロー

OAuthの全体フロー

利用者がID、パスワードなどによって本人であることを確認する行為を「認証」、本人であることを確認したあと、その利用者に対して適切なサービス(またはデータへのアクセス権限)を提供することを「認可」といいます。

OAuthにおいては、利用者の同意によりデータへのアクセス権限がサードパーティーのアプリケーションへ渡されることになりますが、サードパーティーにアクセス権限を付与することも、ここでは「認可」といいます。

またOAuthの仕様では、以下のService Provider、Consumer、End Userの3者間でデータのやりとりが行われます。これらは以下のとおりに定義します。

Service Provider
   End Userのデータを保有している、データ提供元。Yahoo! JAPANのことを指します。
Consumer
   End Userのデータへのアクセスを要求するアプリケーション。サードパーティーのアプリケーションのことを指します。
End User
   Consumerが提供するアプリケーションの利用者、データの所有者。Yahoo! JAPAN IDの利用者のことを指します。

OAuthの全体フロー
OAuthの全体フロー


1. リクエストトークン取得フロー

  1. Consumerは未認可のリクエストトークンを取得するためにリクエストトークン取得エンドポイントにリクエストを送信します。
  2. Service ProviderはConsumerを認証し、問題がなければ未認可のリクエストトークン(oauth_token)を返却します。
  3. Consumerは未認可のリクエストトークンを取得後、一時的に保存します。


2. End Userによる認可リクエストフロー

  1. ConsumerはEnd Userの認可を得るため、End UserをService Providerの認可リクエストエンドポイントへリダイレクトさせます。
  2. Service ProviderはEnd Userを認証して、Consumerがアクセスする権限を与えることについてEnd Userに確認をとります。
  3. End Userによる認可が得られた場合、1のフローにて指定した戻り先URLへEnd Userをリダイレクトさせ、認可済みリクエストトークンと確認用コード(oauth_verifier)をConsumerに渡します。
  4. Consumerは保存しておいたリクエストトークンと、渡されたリクエストトークンが同一かどうか確認します。


3. Access Tokenの取得

アクセストークン新規取得フロー

  1. Consumerは認可済みのリクエストトークンと確認用コードを使って、アクセストークン取得エンドポイントへリクエストを送信します。
  2. Service ProviderはConsumerを認証し、アクセストークン(oauth_token)とセッションハンドル(xoauth_yahoo_session_handle)、およびユーザー識別子(xoauth_yahoo_guid)を返却します。
  3. Consumerは取得したユーザー識別子をキーにアクセストークンとセッションハンドルをあとで利用するため安全に保存します。Consumer独自のIDがある場合は、必要に応じて取得したユーザー識別子とConsumerのIDの関連づけ処理を行ってから、独自IDをキーにアクセストークンとセッションハンドルを保存します。

アクセストークン更新フロー

  1. アクセストークンの有効期限が切れた場合、Consumerは保存しておいたセッションハンドルと期限切れアクセストークンを用いてアクセストークン更新エンドポイントへリクエストを送信します。
  2. Service ProviderはConsumerを認証し、新しいアクセストークン(oauth_token)を返却します。Consumerから渡されたセッションハンドルの有効期限が切れていた場合はエラーを返却します。
  3. Consumerは新しいアクセストークンを取得して期限切れのアクセストークンと置き換えます。セッションハンドルの期限切れでエラーが返却された場合は、Consumerは1のフローからやり直して、再度ユーザーの認可を取り直す必要があります。
アクセストークン更新フロー
アクセストークン更新フロー


4. Web APIアクセスのフロー

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


上記1~4のフローにおけるConsumerの実装についてはサンプルコードを参照してください。