2009-04-25

問題提起 Google Analytics API の AuthSub 認証を OpenSocial ガジェットで使うことの是非

こんにちは。なかじまんです。

多くの人が待ち望んでいた Google Analytics API がリリースされたんですってね。さっそく、次のエントリの解説とサンプルを参考にしながら、自分のサイトでも使えることを確認できました。どんな新しいことに結び付くのか、アイディアが浮かびませんが、何かすごいサービスやアプリケーションが登場するかもしれないですね。

Google Analytics APIのJavaScriptライブラリを使ってみた(準備/認証編) - F.Ko-Jiの「一秒後は未来」
どうやらページ上に画像を1個読み込ませておかないといけないらしい。その画像の存在確認をしているのだろうか。とりあえず1pxの画像を用意してアップロード。こんな風にimgタグを書いておいた。これでログインはうまくいく。不思議不思議。ちなみにログアウトの処理は以下のようにする。
気になったのは "An image of the same domain is required on this page for authenticated reads and all writes." というエラーです。同じドメイン上に画像を配置するっていう条件は必要なんでしょうか。どうもその条件が解せません。そこで、ページ上でどんなことが起こっているのか、HTTP のリクエストやレスポンス、DOM の変化などを観察してみました。

同じドメイン上の画像は google.com からクロスドメインでデータを受信するために使っているようです。具体的には、次のようなフレームウィンドウの入れ子になっていました。example.com は自ドメインを表しています。

<iframe src="http://google.com/...">
<iframe src="http://example.com/your.gif#chunk1..."></iframe>
<iframe src="http://example.com/your.gif#chunk2..."></iframe>
</iframe>

google.com のフレーム内から example.com のフレームを生成します。そのフレームの URL が前述の画像になります。そして、その URL のフラグメントを使って、google.com から example.com へデータを中継します。example.com ではインターバルタイマーを使って、該当画像の URL を含むフレームが出現するのを監視しているようです。

ですので、同じドメイン上の画像というのは HTML(DOM) に限った条件であって、実際に画像ファイルがあるかどうかは関係ないということになりそうです。試しに存在しない画像の URL を指定してみましたが、同じように期待どおり動作しました。さらにいうと、画像の URL である必要さえないということです。

※ とはいっても 404 NotFound が多発することになります。また、img 要素で画像以外のファイルをロードするのもよいことではありませんね。画像ファイルが配置できるなら、配置するべきです。

ということは、任意のファイルを配置できない OpenSocial ガジェットなどからも使える可能性がありますね。ただし、第三者のドメインで使うとなると、セキュリティ上のリスクもあります。Google Analytics API を認証すると、自ドメインの cookie に何かトークンを保存します。このトークンの用途を理解していません。おそらく AuthSub という認証プロトコルと関係があります。

OpenSocial ガジェットで使うとどんな問題があるのかは、認証やセキュリティに詳しい人に聞くとして、少なくとも OpenSocial コンテナは、異なるドメインで、各ユーザの各ガジェットをホストしていることが条件になります。そうでないと、他のユーザや他のガジェットから前述のトークンを奪われるかもしれません。また、サードパーティの cookie を許可していなければ、そもそも使えないでしょう。

Google Analytics APIのJavaScriptライブラリを使ってみた(準備/認証編) - F.Ko-Jiの「一秒後は未来」
ログアウトしないとCookieが2年間残るらしい。
わたしが試したときは cookie は expire されておらず、ブラウザのセッションを閉じると、ログイン状態は失われました。中のひとが日々いろいろ調整しているのでしょうかね。

Google Analytics API は OAuth をサポートする(している?)と聞いたので、OpenSocial ガジェットから使うときは OAuth Proxy を使えばいいのでしょうけれど、JavaScript だけで完結できるなら、それはそれで魅力があるんですよね。

実際のところどうなんでしょう。OpenSocial ガジェットの中から Google Analytics API をJavaScript だけ (AuthSub?) で使うと弊害がありますでしょうか。とっても知りたいです。何か悪いことが起きちゃいますかね。

補足です。Opera 9.5 で試したところ "Unsupported browser. Continue at your own risk." というアラートが表示され、そのまま継続しても期待どおり動作しませんでした。また Chrome で試したところ "No Analytics account was found for the currently logged-in user" というアラートが表示され、期待どおり動作しませんでした。Opera はともかく Chrome で動作しないのはなんでだろう。不思議です。

0 件のコメント: