Webアプリケーションやサービスでは, ユーザ認証にいくつかの種類が存在します.
認証の簡便化のために最近では数多くのサービスがOauthやXauthといった方式の認証方式を採用しています.
今回は, それら2つの簡単な仕組みや違いについて触れていきます.
その前に
これらの認証方式の前に頭に入れておかないといけない技術が, OpenIDです.
OpenIDは, 例えばTwitterのアカウントを持っている際に, ほかのWebサービスのアカウント登録をする際にそこでもTwitterのアカウントを介することによって ユーザ登録の手間を簡略化できるものです.
このOpenIDは, 単体で権限の委譲に制限をかけるといったことが行えません.
そこで必要になってくるのが, これから説明する仕組みです.
Oauth
Oauthは, Xauthと比べて仕組みがかなり複雑です.
その分Xauthよりも格段にセキュアな方式になるため, この方式を採用する場合が多いかと思います.
Twitterを例とした簡単な仕組みは,
- ユーザがサービスに対してTwitterを使用する意思表明をする.
- サービスは, ユーザからTwitterを使用する意思を受け取ったのでTwitterに移動
- ユーザがTwitterにログイン
- Twitterがサービスが必要としている機能を許可し, Twitterからサービスに対してアクセストークンが渡される
- サービスは, Twitterから渡されたアクセストークンでTwitterから情報を取得
- ユーザは, サービスを使用する
このような流れとなるため, 必然的にブラウザが必要となるため, 基本的にはブラウザで使用するサービスに使用するか, デスクトップアプリの場合は内部にブラウザをあらかじめ 仕込んでおく必要があります.
- Oauthのメリットとしては, サービスとパスワードのやり取りをする必要がないため, 仮にサービスが信用ならない場合でも情報の漏洩の可能性が低い.
- 権限の制限ができる
などのメリットがあり,
- 実装が面倒
- 使用するためにブラウザが必要
などのデメリットが存在します.
Xauth
Xauthは, 以前使用されていたBasic認証から取って代わられた認証方式です.
Oauthと比較してかなり実装が楽になっています.
仕組みは,
- ユーザがサービスに対してIDとパスワードを渡す
- 渡されたIDとパスワードを使用してサービスは, Twitterからアクセストークンを求める
- Twitterからサービスに対してアクセストークンが渡される.
- サービスは, 受け取ったアクセストークンでTwitterから情報を受け取る
といった手順でサービスを使用します.
この方式は, 性善説のもとに成り立つため, サービス側が受け取ったIDとパスワードを破棄することを期待しなければなりません.
ユーザ側で破棄されたかの確認が取れないため, 場合によっては情報漏洩が起こりうる.
というデメリットが存在します.
Oauthは, アクセストークンすらも保護され, かなりセキュアなプロトコルですが, Xauthは, 場合によってはIDとパスワードが平文で流れる危険性があります.
Oauthの場合も正規のサービスになりすましたスパムなどがありますが, Xauthに比べて明らかに安全であるため, 出来るだけOauthを使用することを心がけた方がよいかと思います.