シンプルなXAuthの仕様をまとめてみる

※注意
本エントリで扱うXAuthとは、twitterBasic認証から移行させようとしているしくみの話ではありません。

■ XAuthって?

xauth.orgからは、様々なProviderがドメインを超えてアクセスできるbrowser token(XAuth Token)を取り扱うJSが提供されます。

XAuth って、要は HTML5 の Local Storage を使った Shared Cookie だよな。

http://twitter.com/_nat/status/12550370824

仕様ドキュメントでいうとこのあたりですね。

Requirements
* Extenders create a public token for use with XAuth (XAuth Token)
* XAuth only works in modern browsers that support specific HTML5 methods: window.postMessage and localStorage. (IE8+, Safari4+, Chrome3+, FF3+)
* Communication with XAuth domain in the browser will rely on window.postMessage to an iframe on XAuth.org
* Storage of sessions on the XAuth domain in the browser relies on local storage.
* User browser preferences restricting third party cookies may interfere and return an error code.

http://xauth.org/spec/

■ 用語

  • Extender : AuthZをExtendする人、と言いたいのでしょうか。おなじみの用語でいうとOP/SP
  • Retriever : ExtenderのXAuth Tokenにアクセスするひと、RP/Consumer

■ 機能

"取り扱う"の中身ですが、xauth.orgから提供されるJavaScriptでは以下の3メソッド?が定義されているようです。

  • XAuth.extend()
  • XAuth.expire()
  • XAuth.retrieve()

■ XAuth.extend()

Extenderが認証済みという情報(など)をXAuth Tokenとして発行する場合にこれを使います。

パラメータ

  • token : 発行したいXAuth Token文字列
  • expire : Tokenの有効期限
  • session : ブラウザおとしたら消えるかどうか
  • extend : このXAuth Tokenを取得できるRetrieverのcanonical domainのリスト。"*"にすれば世の中の全てのcanonical domainが対象
  • callback : 略

クロスドメインCookie発行メソッドなんて考え方をすればイメージしやすいですかね。
このメソッドを使うと、xauth.orgはローカルに保存しするわけですね。

■ XAuth.expire()

ExtenderがXAuth TokenをExpireさせたいときに使います。
ログアウトしたときや、認可を取り消したいときとかですね。
このメソッドを使うと、xauth.orgはローカルに保存しているXAuth Tokenを削除でもするのでしょう。

■ XAuth.retrieve()

RetrieverがXAuth Tokenを取得したいときにこれを使います。

パラメータ

  • retrieve : Retriecerが気になるExtenderのList
  • callback : 略

You may NOT use a wildcard "*" domain.

http://xauth.org/spec/

この一言は少し気になります。
JavaScriptで使われるJSON APIのレスポンスがハンパない状態になることも想定されますが、
でもここを"*"にできないってことはRetrieverがExtenderを選択することになるのではないのかと。
Nascar Problemについて、メジャーなExtender(Google,Mycrosoft,MySpace,Yahoo!) などは今までドメイン単位で認証状態を判定していたところがドメインを超えて判定可能になります。
"改善"はされるかもしれませんが、ユーザーがどのExtender使っているかわかんないからできるかぎり並べようという状態はこれからも続いてしまう気がします。

まぁ、それはこれから語られていくことでしょう。
meeboのdemoページを見られた方もいると思いますが、G,MS,MySpace,Y!に限定するのであれば今までのOAuthなどよりは利便性が上がるかと思います。

■ とりあえず自分でも動かしてみる

XAuth.orgでもデモできますが、自分でも動かしてみないと実感がわかないものです。
今回のは簡単なJavaScriptを組み込んだHTMLだけで、Cookieも使っていません。

http://r-weblife.sakura.ne.jp/xauth/xauthtest.html

まずは、"XAuth.extend()"という箇所をクリックします。

サンプルで発行したXAuth Tokenの内容とレスポンスを表示しました。
次に、Retrieveしてみます。

retrieveにr-weblife.sakura.ne.jpを指定すると、上で発行したものが取得できると思います。

次に、Expireをしてみます。


で、もう一度Retrieveしてみましょう。

はい、とれなくなります。
同じドメインでやってるのでわかりずらいのですが、XAuthを使えば今のtwitter/FacebookのようにOP/SP達が似たようなiframeうんちゃらでドメイン超えをするJSを作らなくてもよさそうです。

セキュリティ的な部分で問題がないかどうかはもう少し考えたいですね。

■ (次回への宿題)使いどころ

シンプルな仕様だということが分かったと思います。
あとはこれをどうやって使えるかが重要ですね。
TOWRAP!と組み合わせて、XAuth Tokenを利用しながら実際にデータをやりとりするものを作ってみたいと思います。