OAuth Sequence Diagram Template
OAuth Sequence Diagram Template
とりあえず、OAuth のお勉強用にテンプレ化。Web Sequence Diagrams すげー便利だなー。
participant User participant Consumer participant "Service Provider" note over Consumer 6.1 Obtaining an Unauthorized Request Token end note Consumer->"Service Provider": "6.1.1. Consumer Obtains a Request Token" activate "Service Provider" "Service Provider"->Consumer: "6.1.2. Service Provider Issues an Unauthorized Request Token" deactivate "Service Provider" note over Consumer 6.2 Obtaining User Authorization end note activate Consumer Consumer->User: "6.2.1. Consumer Directs the User to the Service Provider" deactivate Consumer activate User User->"Service Provider": "Redirect to Service Provider" deactivate User activate "Service Provider" "Service Provider"->User: "6.2.2. Service Provider Authenticates the User and Obtains Consent" deactivate "Service Provider" activate User User->"Service Provider": "Authenticate and Consent" deactivate User activate "Service Provider" "Service Provider"->User: "6.2.3. Service Provider Directs the User Back to the Consumer" deactivate "Service Provider" activate User User->Consumer: "Redirect to Consumer" deactivate User activate Consumer note over Consumer 6.3 Obtaining an Access Token end note Consumer->"Service Provider": "6.3.1. Consumer Requests an Access Token" deactivate Consumer activate "Service Provider" "Service Provider"->Consumer: "6.3.2. Service Provider Grants an Access Token" deactivate "Service Provider"
OAuth Core 1.0 Revision A (1)
d:id:ZIGOROu:20090811:1250006392 を適宜参照しつつ。自分用のメモです。
用語
3. Definitions より、抑えておくべきものだけ。
- Service Provider
- OAuth 使ったアクセスを許可するサービス。SP と略。
- User
- SP のアカウント持ってるユーザー
- Consumer
- ユーザーに代わって OAuth を使い SP にアクセスするウェブサイトまたはアプリケーション
- Protected Resource(s)
- SP によって制御されるデータで、Consumer は認証を通じてアクセス可能。
- Consumer Key
- SP に対して自身を識別する為に Consumer により用いられる値Provider.
- Consumer Secret
- Consumer Key の所有を確立するために Consumer によって用いられるシークレット
- Request Token
- ユーザーからの認可を得る為と Access Token に交換する為にに Consumer によって用いられる値
- Access Token
- ユーザーの持つ SP のクレデンシャルを用いる代わりに、ユーザーの代わりに Protected Resources にアクセスする為に Consumer によって用いられる値
- Token Secret
- 与えられた Token の所有を確立する為に Consumer によって用いられるシークレット
- OAuth Protocol Parameters
- oauth_. から始まる
お約束とか
4. Documentation and Registration
Consumer Secret は Consumer と SP 以外の誰かに知られちゃ駄目です。
OAuth の三つの Request URL
SP がやるべきこと
Consumer Key, Consumer Secret を何らかの方法で SP-Consumer 間で共有できるような枠組みを提供しつつ、
- 三つの Request URL を提供する。対応する HTTP Method とかも明示する。
- SP が対応する署名方式を明示する。
- 他に何か拡張パラメータがあれば明示する。oauth_ で始まっては駄目。
OAuth Core 1.0 Revision A (2)
d:id:ZIGOROu:20090811:1250008682 の続き。
パラメータ
5. Parameters の辺りの話。
Consumer のリクエストパラメータ
以下のいずれかで。
- Authorization ヘッダにぶち込む (OAuth HTTP Authorization Scheme)
- application/x-www-form-urlencoded 形式の POST
- QUERY_STRING
将来的な拡張を見越して Authorization ヘッダは使うべきじゃない。
SP のレスポンスパラメータ
こんな感じ。
oauth_token=ab3cd9j4ks73hf7g&oauth_token_secret=xyz4992k83j47x0b
OAuth HTTP Authorization Scheme
リクエストヘッダに Authorization ヘッダを用いて、レスポンスヘッダに WWW-Authenticate ヘッダを用いる事によって OAuth のパラメータのやりとりする方式。
リクエストに使う Authorization ヘッダはこんな感じになる。
Authorization: OAuth realm="http://sp.example.com/", oauth_consumer_key="0685bd9184jfhq22", oauth_token="ad180jjd733klru7", oauth_signature_method="HMAC-SHA1", oauth_signature="wOJIO9A2W5mFwDgiDvZbTSMK%2FPY%3D", oauth_timestamp="137131200", oauth_nonce="4572616e48616d6d65724c61686176", oauth_version="1.0"
でレスポンスの時はこんなのを SP が付けてくる。
WWW-Authenticate: OAuth realm="http://sp.example.com/"
OAuth を用いた認証
6. Authenticating with OAuth の辺りの話。
ユーザーの Credential を用いる事無く、Consumer がユーザーの代わりに SP の Protected Resources にアクセスする為に二つの Token を用いると。
- Request Token
- ユーザーに Protected Resources へのアクセス認可を求める為に Consumer によって用いられる値で、その認可が得られたら Access Token へと交換する為に用いられる。適切な有効期間を設定した方がいい。
- Access Token
- ユーザーの代わりに SP の Protected Resources にアクセスするために Consumer によって用いられる値。Access Token はアクセス可能な Protected Resources に制限があるかもしれないし、有効期間にも制限があるかもしれない。ユーザーによって無効にされる場合もある。
で、OAuth の Authentication メカニズムはざっくり言えば3つのステップ。
- Consumer がユーザーから未認可の状態の Request Token を SP から得る
- User が Request Token を認可する
- Consumer は SP とユーザーによって認可された Request Token を Access Token に交換する
って感じ。