Y!OAuthがOpen Social Containerに使われるためには

今までもちょこちょこ考えていたりしてたけど、twitterで関係者の人たちと話したのでもう一回整理しておきます。
ここでいうY!OAuthとはYahoo!IncのOAuth仕様のことを表します。


■ Y!OAuthの特徴

  • OAuth Session Extensionという拡張仕様を導入

http://developer.yahoo.com/oauth/guide/oauth-auth-flow.html
http://oauth.googlecode.com/svn/spec/ext/session/1.0/drafts/1/spec.html
説明は省略します。


■ この拡張使うOAuthがこのままOpenSocialContainerに使われるとどうなる?

  • OAuthのAccess Tokenの有効期限が短い(Y!では1時間)のため、ガジェットが短期間しか使えない

orz


■ 誰が何をすればいい?

  • Containerが拡張対応 ≒ Shindigが拡張対応

簡単に言えるけど、結構大変ですねと。
SP側も少し親切にした方がいいと思います。例えば、

  • OAuth Session Extensionを使っているSPはそのことをXRDで定義

OpenIDのDiscoveryみたいな感じですね。
OAuthにもDiscoveryのExtensionあったと思うんですが、それとかで定義しておくと、

  • 1. ContainerがSPをDiscovery
  • 2. その結果からロジックを通常のOAuth CoreなのかOAuth Core + Session Extensionなのか決める

す、すこしは使いやすくなりそうですよね。
この拡張がみんなに使われるようになればコード組み込みも実現されるのかもしれないけどY!系だけじゃな。。。


■ 少し一般的なお話


OAuthのSPがOpen Social Containerから使われるためには、こんなこと考えないといけませんねと。

  • そもそもOAuthのConsumerって誰だっけ?
  • RSA-SHA1署名への対応 ( + OAuth Key Rotation Extension )
  • OAuth Gadget Extensionへの対応

誰がConsumerかって話はagektmrさんのエントリhttp://devlog.agektmr.com/archives/174にもあるように、2パターンあるんじゃないですかと。

  • (1) GadgetがConsumer
  • (2) ContainerがConsumer

(1)の場合、ContainerはGadget単位でConsumer Key/SecretもしくはRSA秘密鍵の管理をして、SPへのリクエストを作る際に使い分けます。
(2)の場合、Containerが一つのConsumer Key/SecretRSA秘密鍵を使ってSPのリクエストを作ります。
実際にはGadget単位でユーザーにリソースアクセスの許可を求めるので、OAuth Gadget Extensionのxoauth_app_urlでURLをSPに伝えてユーザーへの同意画面に含めてもらうという感じでしょうか。

SP側としては、(1)だと他のOAuthアプリと同様に、ユーザーに対して「このアプリにあなたのデータをアクセスさせるんだよ」と説明できるのでシンプルです。
iGoogleに乗ってるYahoo! Updatesガジェットはこのタイプですね。

(2)の場合はOpenSocialアプリ(今後この拡張が広まれば別だけど)を意識して「ContainerがこいつでアプリのURLはこれです」ってとこをどのようにユーザーに見せたらいいかも考えないといけないような。
あと、AccessTokenのScopeもContainer全体というあたりをどう考えるかとか。
とりあえず、ShindigベースのContainerは(2)のやり方で今後どんどん増えるのであれば、無視はできないでしょうね。

RSA-SHA1については省略。過去の記事を参照してください。
(1)だろうと(2)だろうとRSA-SHA1の署名は実装が簡単そうなのでSPはやった方がいいと思う。
ん、パフォーマンスってどうなんだろう。HMAC-SHA1と比べて重いのかな?


■ まとめ


「あまり他のところが使わない拡張使うと、マイナス?の影響がでることもある。」
この件、今後も相談させてください > Containerの皆様


■ 参考リンク


自分のエントリも並べておこう。