Proposal : OAuth Provider Request - Spec

■ 目的

この提案仕様は、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の発行のしくみが必要になる。
ここについては、いろいろと考え中。

■ 参考リンク