2012-01 << 2012-02 >> 2012-03

2012-02-02 (木)

*OAuth2.0とか

http://www.thread-safe.com/2012/01/problem-with-oauth-for-authentication.html

会社で話題になったのでOAuth2.0について少し調べてみた.

http://tools.ietf.org/html/draft-ietf-oauth-v2-23

読むとWebアプリケーションからAPI呼ぶためのaccess_tokenを取得するのに使えそうな方法として「Authorization Code Grant」と「Implicit Grant」というのがある.

記事で問題になっているのは,Implicitの方.ブラウザにaccess_tokenが渡されるので,他のクライアント(サイト)で取得されたトークンとすりかえることができる.

たとえば,アリスが運営するサイトが,Implicitでユーザー認証もどきをやっていて,ボブがそのサイトを利用している場合を考える.イブは攻撃者.

  1. イブは無害そうな内容の罠サイトを作って待ち構える
  2. ボブが罠サイトにOAuthでログインする
  3. イブはaccess_tokenを取得できる
  4. イブがaccess_tokenをアリスのサイトに渡す
  5. イブはボブとしてサイトにアクセスできる

つまり,パスワードを渡さない(一見)安全そうなOAuthなのに,パスワードを複数サイトで共有するのとまったく同じ危険性がある.そもそも,ユーザー認証に使える仕組みでは無いので,使ってはいけない.

もう一方の,Authorization Codeはブラウザ経由で渡されたauthorization codeをクライアント情報と一緒に渡すので,他のクライアントが取得したcodeは使えない.

FacebookのOAuthインターフェイスがAuthorization Codeに対応してるのか良くわからないですが,Authorization Code使えということでいいのかな.

2012-01 << 2012-02 >> 2012-03