mixilabo のサービスはパスワードを渡さなくても実装できるかも
文句ばかり言うのもあれなので。 昨日の日記で「足跡をつけた人の追跡」以外ではパスワードは要らないはずって書いたけど、「足跡をつけた人の追跡」もパスワードを渡さずに実装できる気がしてきた。 ポイントは以下のとおり。
- mixi のあしあとAPIを使って足跡を取得する
- mixilabo には生パスワードではなく、WSSEで規定された wsse:PasswordDigest を渡す
- wsse:PasswordDigest は JavaScript を使ってクライアントで生成する
wsse:PasswordDigest は以下のようにして生成する(参考リンクの仕様書から引用)。
Password_Digest = Base64 ( SHA-1 ( nonce + created + password ) )
生パスワードとの違いは、毎回 nonce と created を違う値にすることで、生成されるダイジェストの値も毎回異なること。 mixi 側が同じ nonce を一度しか受け付けないようになっていれば、ダイジェストの使いまわしはできないはず。 図にするとこんな感じか。
生パスワードの場合 [client] ----- (password) -----> [mixilabo] ----- (password) -----> mixi
あしあとAPIの場合 [client] -- (nonce, digest) ---> [mixilabo] -- (nonce, digest) ---> mixi (同じ nonce は一度しか受け付けない) ↑ JavaScript: digest = base64(sha1(nonce + created + password)
利用者はパスワードを入力するけど、パスワード自体は mixilabo には送られない。 ただ困ったことに、本当に生パスワードを送っていないかどうかを利用者が確認するのが難しいんだよね…。
参考リンク
- Web Services Security UsernameToken Profile 1.0 … wsse:PasswordDigest の仕様
- Do You PHP はてな - mixiのあしあとAPIを使って「あしあと一覧」を作ってみた … PHP での mixi あしあとAPIの実装
- JavaScript WSSE Header Generator … WSSEヘッダ生成のJavaScript実装