OAuth、xAuthの問題点
OAuthってユーザにとってセキュアだし、とってもクールだね!と思っていたのですが、デスクトップアプリケーションがConsumerとなる場合、問題があるということが巷で話題になっていました。
何が問題なの?
ConsumerはService Providerにリクエストを送る時、Consumer KeyとConsumer Secretというパラメータを用いて、Consumerであるという証明をService Providerに行います。この情報さえ分かってしまえば、そのConsumerとしてなりすまして動作するアプリケーションを作れてしまいます。
暗号化すればいいんじゃないの?
Consumerがウェブアプリケーションである場合、ユーザからは完全にConsumer KeyとConsumer Secretが隠蔽されていますが、デスクトップアプリケーションの場合そうはいきません。何らかの形でConsumer KeyとConsumer Secretを取得し、Service Providerにリクエストを投げかけなければいけません。仮に暗号化して格納していても、少なくとも、リクエスト時にはこのペアのパラメータは平文化しなければならないので、その時点で完全に無防備な状態になります。
じゃあ、どうすればいいの?
外部サーバにConsumer KeyとConsumer Secretを格納し、そこを経由してリクエストを送る外無いと考えていますが、サーバのコストがかかることを考えると非常に面倒です。また、外部サーバを経由しなければならないのでユーザにとってのリスクが大きくなります。xAuthを使うとすれば、ユーザのIDとパスワードの平文がそのサーバを経由することになります。経由するサーバの情報を書き換えられた場合、そのユーザ情報を盗まれてしまう危険性があります。
結局、Consumerなりすましは防止できないの?
現在、有効な手段は見当たりませんし、思いつきません。Service Provider上のクライアントアプリケーション名表示の信頼性はあまり無いのが現状です。どうにかならんかなあ。