ごった煮

色々な事を書いてます

Webアプリケーションで使われる認証方法の話

Webアプリケーションやサービスでは, ユーザ認証にいくつかの種類が存在します.

認証の簡便化のために最近では数多くのサービスがOauthやXauthといった方式の認証方式を採用しています.

今回は, それら2つの簡単な仕組みや違いについて触れていきます.

その前に

これらの認証方式の前に頭に入れておかないといけない技術が, OpenIDです.

OpenIDは, 例えばTwitterのアカウントを持っている際に, ほかのWebサービスのアカウント登録をする際にそこでもTwitterのアカウントを介することによって ユーザ登録の手間を簡略化できるものです.

このOpenIDは, 単体で権限の委譲に制限をかけるといったことが行えません.

そこで必要になってくるのが, これから説明する仕組みです.

Oauth

Oauthは, Xauthと比べて仕組みがかなり複雑です.

その分Xauthよりも格段にセキュアな方式になるため, この方式を採用する場合が多いかと思います.

Twitterを例とした簡単な仕組みは,

  1. ユーザがサービスに対してTwitterを使用する意思表明をする.
  2. サービスは, ユーザからTwitterを使用する意思を受け取ったのでTwitterに移動
  3. ユーザがTwitterにログイン
  4. Twitterがサービスが必要としている機能を許可し, Twitterからサービスに対してアクセストークンが渡される
  5. サービスは, Twitterから渡されたアクセストークンでTwitterから情報を取得
  6. ユーザは, サービスを使用する

このような流れとなるため, 必然的にブラウザが必要となるため, 基本的にはブラウザで使用するサービスに使用するか, デスクトップアプリの場合は内部にブラウザをあらかじめ 仕込んでおく必要があります.

  • Oauthのメリットとしては, サービスとパスワードのやり取りをする必要がないため, 仮にサービスが信用ならない場合でも情報の漏洩の可能性が低い.
  • 権限の制限ができる

などのメリットがあり,

  • 実装が面倒
  • 使用するためにブラウザが必要

などのデメリットが存在します.

Xauth

Xauthは, 以前使用されていたBasic認証から取って代わられた認証方式です.

Oauthと比較してかなり実装が楽になっています.

仕組みは,

  1. ユーザがサービスに対してIDとパスワードを渡す
  2. 渡されたIDとパスワードを使用してサービスは, Twitterからアクセストークンを求める
  3. Twitterからサービスに対してアクセストークンが渡される.
  4. サービスは, 受け取ったアクセストークンでTwitterから情報を受け取る

といった手順でサービスを使用します.

この方式は, 性善説のもとに成り立つため, サービス側が受け取ったIDとパスワードを破棄することを期待しなければなりません.

ユーザ側で破棄されたかの確認が取れないため, 場合によっては情報漏洩が起こりうる.

というデメリットが存在します.

Oauthは, アクセストークンすらも保護され, かなりセキュアなプロトコルですが, Xauthは, 場合によってはIDとパスワードが平文で流れる危険性があります.

Oauthの場合も正規のサービスになりすましたスパムなどがありますが, Xauthに比べて明らかに安全であるため, 出来るだけOauthを使用することを心がけた方がよいかと思います.