非エンジニアのためのOAuth講座

OAuthって何?

いわゆるこういうのです

最近Twitterで スパムアプリがおっぱいポロリと勝手につぶやく といった事件が世間を賑わせています。 このままでは「OAuthは犯罪です!」なんて言い出す人が現れかねないので、 OAuthってどんなものなのか、Twitterを例に誤解されそうなところを簡単に説明したいと思います。

誤解1: OAuthはユーザ認証の機能である

多くのWebサイトに Twitterでログインする 機能があり、 上の画面をユーザ認証の仕組みだと思っている人は多いと思いますが、 大間違いです

OAuthは、他のアプリ(サイト)に対して、自分の代わりにTwitterにアクセスする権利を与える仕組みです。 その過程でユーザ情報がとれるので、ログインの代わりに使っているアプリが多いのですが、本来は間違った使い方です。 他のサービスを使ってユーザ認証をする仕組みに OpenID というOAuthの兄弟規格のようなものがあるのですが、 対応しているサービスも少なくイマイチ流行ってません。

何はともあれOAuthの許可をすると、Twitterの操作をする権限をアプリに与えてしまします。 信頼できないアプリに対して許可なんか与えたらダメです。 何ができるかは許可画面に書かれているので よく読みましょう 。 上の画像の場合は、

  • tweetが読めるよ
  • フォローしてる人が見れるよ
  • プロフィール変更できるよ
  • tweetできるよ

と書かれています。

Twitterは親切で何ができないかも書いてあります。

  • ダイレクトメッセージにはアクセスできないよ
  • パスワードは見れないよ

どこまで権利を欲しがるかはアプリによって違うので きちんと読みましょう

まとめ

  • OAuthは他のアプリに権限を渡す仕組みだよ
  • 許可画面はよく読もう
  • 信頼できないアプリを許可したらダメだよ

誤解2: 念のためパスワード変えたほうがいい

スパム系アプリが流行すると、パスワード変えたほうがいいという人が必ず現れますが、全く不要です。 むしろパスワード変えないとヤバイよと煽って来る人は、 罠にかけようとしている可能性もあるので警戒したほうがいいです

まともなサービスなら、OAuthで許可を得ていても アプリからパスワードは見えないし変更もできません 。 そもそもパスワードは元の文字列に復元できない方法でデータベースに保存されています。

アプリとサービスは、OAuthの許可を与えた時に発行される アクセストークン という文字列を使ってやりとりします。 なのでアプリはパスワードを一切知ることはないし、知る必要もありません。 もしアプリ側でパスワードを入力させようとしてきたら 完全に罠です

アプリの許可を取り消せば、アクセストークンが無効化されて、それ以降アプリはアクセスできなくなります。 あとは勝手にされたtweet消したり勝手にされたフォロー外したりは手動でやる必要があります。

まとめ

  • パスワードは変えなくていいよ
  • アプリがパスワード入力を求めてきたら罠だよ
  • 許可を取り消せばそれっきりだよ
  • ビビって騙されないように

誤解3: OAuthは安全である

条件が揃えば、結構簡単にアプリのなりすましが可能です。(特にスマートフォンアプリ)

アプリにはいくつかOAuthのための設定がありますが、 それを全く同じにして別のアプリを作ると、本物になりすますことが可能です。

信頼できるアプリを許可をしたあと、自動でアプリに戻って来るタイミングで、 複数のアプリ候補 (Androidの場合 他のOSは知らん) がある場合は、その中に偽物が含まれていると思っていいでしょう。 まだこの時 アクセストークン は発行されていないので、ここでストップすれば乗っ取りは防げます。 しかし、もし間違って偽アプリを選んでしまったら、 偽アプリがアクセストークンを取得してしまいます。 つまりその瞬間になりすましが成立します。

アプリ選択画面が出てくるのはまだマシな方で、 もしこれが、もう使ってなくて アンインストールしたアプリ と同じ設定を使っていた場合、 アプリ選択画面すら出ずに 偽アプリがアクセストークンを取得してなりすまします。 過去に許可していて、その許可がまだ有効な場合は 許可画面すら出ずに 偽アプリがなりすますこともあります。

Webアプリの場合はスマートフォンアプリほどなりすましは簡単ではないですが、 ドメインごと盗まれた場合 はなりすまし可能です。 信頼できないDNSを使っている場合 もなりすまし可能です。 サービスを運営する会社が 買収された時 は買収会社の動きに注目したほうがいいです。

なりすまされた場合、許可したアプリ一覧に出てくる名前は 信頼できるアプリ なので、 何が犯人なのかなかなか気づきにくいです。

まとめ

  • アプリ候補が複数出たら怪しいからストップしたほうがいいよ
  • アプリを消したら許可も取り消そう
  • 定期的にリストをチェックして使ってないアプリは全部取り消そう
  • 犯人がわからない時はアプリの許可を全部取り消せばとりあえず問題解決

さいごに

OAuthは、ユーザIDやパスワードを漏らすこと無く、他のアプリにアクセス権を与える仕組みで、 過去にあった IDとパスワードを保存して代理アクセスするアプリ に比べたら 格段に安全 な手段です。 エンジニア視点からしても、知らなくていいこと(パスワード)を知らないままでいられる 非常に便利な仕組みで、 今後さまざまなサービスがOAuthでのアクセスを提供するようになると思います。 そういう時代なので上記の内容を最低限知っておいたほうがいいと思います。

ただやはり気軽に許可できるものではないので、アプリを許可する際はよく読んでよく考えてよく疑ってかかりましょう。

あとOpenIDは事実上死んでいるので 何もできないOAuth として再定義されるべきだと思います。