第三者が作るウェブサービス系APIの抱える問題

WWW::Mixiもそうだし、私が作ってるCheckPad APIもそうだけど、非常に面倒な問題を抱えている。その一つは認証だ。どうしてもAPI側で認証しなくてはいけないから、悪意のある開発者がなにかサービスを作った場合、ユーザの入力したパスワードを盗めるんだ。というのも、おおざっぱに言えば、以下のような仕組みで動作しているからだ。

ユーザ → (パスワード等を入力) → WWW::Mixi → (ユーザのパスワードを送る) → mixi

仲介しているから、盗むのは簡単。例えば、以下のWWW::Mixiを使ったサービスでもその懸念を払うべくソースを公開して、悪意が無い事を証明しようとしている。が、残念ながら、そのソースが使われているか分からないから、証明にはなっていない(疑っているわけではありませんが…)。

では、どうすればいいのか?

認証に関してはTypeKeyはてな認証APIのような仕組みを利用して、サードパーティーのサービスにパスワード等を見せないやり方が考えられる。この場合、mixicheck*padでこのようなAPIを公開すればいい。

もっと、面倒な問題がある。それは、プライベートな情報を開発者に見られてしまう(または、盗まれてしまう)ことだ。例えば、check*padを例に挙げると、次のようなシチュエーションが考えられる。

ある日私がCheckPad APIを利用したものすごい良いサービスを提供したとする。このサービスはcheck*padのTodoリストを加工して、見やすくしたものだとしよう。認証に関してはなんらかの認証APIを利用して、パスワードは盗めないようになっている。しかし、もし私に悪意があれば、私のサービスを利用する全ユーザの非公開のチェックリストを盗む事が可能だ。

これはつまり、非公開の情報をweb 2.0*1に扱うのが非常に難しいことを意味する。プライベートな情報とパブリックな情報をつなげると面白い事が出来そうな気はするものの、ユーザからの信頼を得られるかどうかが難しい。

何か良い改善策はないだろうか…。一瞬、情報は暗号化されたものを受け取り、クライアント側で複合化とかも考えたけど、複合化されたものをAjaxで自分に送り返したら一緒なんだよなぁ。

*1:ここでいう”web 2.0的”は「複数のサービスを連携して新しいサービスを作る」ことを指す