■ 目的
この提案仕様は、ProviderからConsumerに送信されるRequestを定義したものである。
前提条件として、Provider-Consumer間でConsumerKey/Secret or Pubkeyなどの発行/登録作業が完了しているものとする。
■ Request
Provider Requestには、下記のパラメータが含まれる。
ここでは、Userが介在しない2legged Requestに必要なパラメータを定義する。
- oauth_consumer_key : ProviderとConsumerの間で共有されているConsumerKeyの値
- oauth_signature_method : 署名の方法
- oauth_signature : 署名
- oauth_timestamp :
- oauth_nonce :
- oauth_version : 1.0
- xoauth_provider_key : ConsumerがProviderを一意に識別するための文字列。providerのドメインを利用する。
◆ xoauth_provider_key
一般的なOAuthはProviderがConsumerに対してConsumerKeyを発行します。
その場合の双方の識別について、以下のような状態になります。
- Provider AがConsumerに対して"abcde"というConsumerKeyを発行した場合、Providerは"abcde"の文字列だけでConsumerを識別できる
- Consumerは別のProvider Bからも"abcde"というConsumerKeyを発行される可能性があるため、アクセス元のProviderを"ProviderA"と"abcde"の組み合わせで識別しなければならない
Requestを受けたConsumerがProviderを一意に識別するために、Provider Requestはxoauth_provider_keyというパラメータを含みます。
◆ Signature method
利用できるSignature methodは以下の3つです。
◆ HMAC-SHA1
OAuth Core 1.0aの定義とほぼ同じです。
ConsumerSecretを用います。
◆ RSA-SHA1
Providerは、ProviderのPrivateKeyを使ってSignatureを作成します。
K : Provider's RSA private key
M : M the Signature Base String
S : Signature Value
S = RSASSA-PKCS1-V1_5-SIGN (K, M)
Consumerは、ProviderのPublicKeyを用いて署名の検証を行います。
(n, e) : Provider's RSA public key
M : the Signature Base String
S : Signature Value
RSASSA-PKCS1-V1_5-VERIFY ((n, e), M, S)
PublicKeyのやりとりについてはここでは定義しません。
◆ PLAINTEXT
OAuth Core 1.0aの定義と同様に、PLAINTEXTのときはHTTPS必須です。
■ TBD
以下の点については、今後よく考えなければならない点である。
- XRDS Documentによる本拡張仕様のサポート宣言
- 2legged vs 3legged
■ おまけ : Provider's 3legged Request
Provider's Requestを考えるとき、EndUserの識別子をパラメータに用いた2legged Requestが思い浮かぶが、
Resourceの内容によってはアクセス権限の委譲が行われた上の3legged Requestが必要になるかもしれない。
Provider上のEnd Userにたいして紐づくConsumer上のResourceにProviderがアクセスするためのRequest
この場合、認可のしくみとAccessToken/Secretの発行のしくみが必要になる。
ここについては、いろいろと考え中。
■ 参考リンク