一瞬popup + 以降iframeでproxyするようなもの。XHR level2いらないのでやや動作環境が広がる。
- クライアント側ボタンクリックで window.open + ランダムなid(これをclient_id相当にする)の名前をつけてiframe埋め込み
- popup windowにiframeの名前をpostMessageで送る
- サーバー側: popup windowはiframeに対してpostMessageで返信(event.source.frames.xxxx)、api-domainのoriginであることを確認、cookieで認証してランダムなidとセットで使えるトークン発行
- トークン保存はmemcachedなど揮発性のストレージで良い。使っている限り期限が延長される。最長期限があってもよい(あったほうがよい)
- ログアウトとセットで破棄されるようになっていると良い
- iframeはポップアップwindowからメッセージを受け取る。ランダムなid + トークンを使ってAPIにアクセスする。
- iframeは親windowからメッセージを受け取る。あとはpostMessageでproxyしてXHRのリクエスト、レスポンスをやり取りする。
- iframeは親windowからのメッセージであることをevent.originを使って検証する