OAuthなプラットフォームの中の人が椅子を投げたくなるアプリの実装

こんばんは、ritouです.

世の中, OAuthの仕様に沿って提供されているAPIだらけです.
モバイル端末で動作するアプリでも, そんなAPIを利用するものだらけです.

OAuthなユーザーフロー

アプリのOAuth実装となるとそれはそれはこまけぇことでいろいろあります.
とりあえず, OAuthなプラットフォームを提供する側は以下のようなユーザーの動きを望んでいます.

  1. mixiと連携するボタンを押す
  2. 外部のブラウザが立ち上がる
  3. 未ログインの場合はログイン画面が表示されるが, 頑張ってHTTPS+ドメイン名とかを確認してログイン
  4. アプリによるリソースアクセスに対して同意
  5. アプリに戻って連携完了

やや複雑なものに思えるかもしれませんが, OAuthなプラットフォームを提供している中の人たちからすると,
アプリがID(Email)/PWなどを直接扱わないことで意図的な悪用, 意図しない漏えいからのほげほげなどのリスクを防ぐことができますよ.
と言いたいわけです.

(6/21 追記 : TwitterのxAuthのようにOAuth 2.0でもユーザーのクレデンシャルを扱うフローも定義されていますが、現状のモバイルアプリのようにブラウザが立ち上がる環境では利用を避けるべきという認識でいます。よって、今回の記事の中ではClientがクレデンシャルを扱わない実装を"OAuthの実装"とさせていただきます。)

この実装は投げる

(6/21 追記 : mixvTweetの開発者の方からコメントがあり、スクレイピングAPIアクセスを併用しているとのことでした。
スクレイピングを利用するアプリに関してはさらにいろいろな論点があると思っているため、本エントリではOAuthのAPIのみ利用しているアプリを対象にしています。
確認不足で不正確な情報を流してしまい、申し訳ございませんでした。)

あるAndroidアプリの画面を見てみます.
mixvTweetというアプリです.
これはマルチポストができるアプリですかね, Twitter, mixiのボイス, Facebookに投稿できます.
こちらのアプリは別件で使ってみることにしたのですが, 設定画面を見て驚きました.
各サービスとの連携のための画面はこちらです.

アプリ側がEmail/PWの入力を求めています.
アプリが生のEmail/PWを扱ってますね。スクレイピングの類かな?
せっかくクレデンシャルを扱わないOAuthなプラットフォームを提供しているのに残念です.
これはひどい.

まぁ、切り込まなければならないということで、覚悟してEmailとPWを入力しました.
途中でいかがわしいことを考えてしまいPWを打ち間違えたところ, "認証NG"となりました.
やはり, なんらかの方法でEmail/PWの正当性をmixiに確認しています.
ログイン画面をあーしてこうして....
とりあえず正しいPWを入力すると, 次の画面がこうなりました.

これはOAuthのリソースアクセスの同意画面です.
このアプリはフルでスクレイピングしまくってほげほげではなく, ご丁寧に入力したEmail/PWでログインさせてくれるようです.
もしかしたらログイン画面が出て自分でログインするよりスムーズな処理になるのかもしれません.
親切?でもやっぱりそれじゃOAuthの意味ない.

同意画面を出されたところでWebView?なのでURLやドメインも確認できません.
そもそも勝手にクレデンシャルの検証するんじゃねーよと.

ということで、このアプリの開発者の方にはぜひ"Facebook連携"と同じ実装にしていただくよう願うばかりであります.

自分のアカウントのパスワードをアプリに渡すことをよしとしないのであれば, このアプリは使わない方が良いと思います.
もう既に使っている方は連携解除したあとにPW変更した方が良いかもしれません.
アプリが受け取ったPWをどこかに保存していたりしているかもしれないですからね.
(追記)例え悪いことをしていないとしても、PWを受け取った時点でできる状態になっているので疑われるリスクがありますよということです。

他に, TkMixiViewerというアプリがありますが, こちらもEmail/PWをアプリでもらい同意画面が出てきます.
しかも、同意画面でキャンセルしても情報がひっぱられるという不思議な現象が起きているのでスクレイピングが行われているんじゃないかとふんで調査中です.

絶対に守っていただきたいこと

公式アプリ、webサイト以外にEmail/PWを入力したり渡すかどうかはユーザーが決めることですが、悪用されるリスクまで考えたらやはり今回のようなアプリは良くないですね。(twitterの指摘によりあっさり方向転換)

OAuthなプラットフォームを提供している人たちからしたら椅子を投げたくなるような実装はまだまだたくさんありそうです.

アプリ開発者の皆様、OAuthのプラットフォームにて提供されているAPIを利用する際は, ユーザーのID(Email)/PWを直接扱わないでください!

以上, よろしくお願いいたします.