OAuthでデスクトップアプリがブラウザを経由させたくないときのxAuth

最近twitter APIまわりで話題に出てきているようなので。


ちゃんと追いかけきれてないけど、恐らくこれのことですね。
http://tools.ietf.org/html/draft-dehora-farrell-oauth-accesstoken-creds-00


OAuth WRAPではUsername and Password Profileとして組み込まれてます。
http://d.hatena.ne.jp/lyokato/20091118/1258524429


WRAP/2.0が来るまでにOAuth1.0aで使いたい時に。

利用状況

ブラウザがない、あるいはブラウザを使うのが適切ではない状況での
いわゆるデスクトップアプリのためのもの。
組み込みだったり、搭載されているブラウザが貧弱だったりとか。
ブラウザと連携させたくない、あるいは出来ないとき。

仕様

まず始めにクライアントは、エンドユーザーにユーザー名とパスワードを入力させます。


クライアントは、いきなりアクセストークンを取得しにいく。
リクエストークンを取得したり、ユーザーをプロバイダのページに飛ばして認可させる、という処理は省きます。
ユーザー名とパスワードを預かってる時点で、「ユーザーがクライアントを信頼してる」ということになるので。


アクセストークンURLにリクエストするときのパラメータは次のようになります。

  • x_auth_username
  • x_auth_password
  • x_auth_mode
  • oauth_consumer_key
  • oauth_signature_method
  • oauth_signature
  • oauth_timestamp
  • oauth_nonce
  • oauth_version

普通のOAuthのリクエストで使われるものと何が違うのか


まずoauth_tokenパラメータを省きます。 このやりとりでは、リクエストークンを使わないので必要ありません。
x_authで始まる3つのパラメータが追加されています。(なのでxAuthと呼ばれてるみたい)


エンドユーザーから預かったユーザー名とパスワードを、
x_auth_username, x_auth_passwordの各パラメータの値として使うということですね。
x_auth_modeは必ず"client_auth"にしておきます。


このリクエストに対するレスポンスには次のパラメータが含まれます。

  • oauth_token
  • oauth_token_secret
  • x_auth_expires

tokenとtoken_secretはいつものですね。
x_auth_expiresが加わっています。unix timeの秒数が入ります。
その時間になったら、アクセストークンの有効期限が切れます。
ここが0になっていたときは無期限です。

所感

クライアントは、「ユーザー名とパスワード」というアカウント情報を、アクセストークン取得時にのみ使い、
その後は、アクセストークンのみ保存し、アカウント情報は記憶しないというのが行儀のよい使い方、ということになると思います。


とは言ってもエンドユーザーから見て、クライアントがそうしてくれる保証はないわけですし、フィッシングの危険性は伴います。
提供しているデータの性質を考えるとか、特定の信頼できるコンシューマのみに利用させるとかで、プロバイダ側はバランスを考える必要があるのではないでしょうか。


あと先日のGumblrのデスクトップ上に保存されたパスワード盗難の件もあることですし、トークンの保存時は気をつけましょう。