2010年12月15日水曜日

サルでもわかるOAuthとXAuthの仕組みと違い


APIやWEBサービスを利用する際によく見かけるのがOAuth(オーオース)とxAuth。



しかし、OAuthは仕組みがやや複雑であるため、詳しく解説されると逆に混乱し簡易すぎるとよくわからない仕組みと理解されがちです。



そこで、自分なりにイイ感じにスッキリまとめたので紹介します。



前書き


近年Webサービスが爆発的に普及してきました。



代表的なサービスではGoogle Yahoo mixi Twitter Facebookなどでしょうか。



これらのWEBサービスを利用又は開発する際に問題になるのがユーザ管理です。



IDやパスワードを預かるWEBサービスではユーザ登録の手間やセキュリティの強化など、利用する側も開発する側にも少なからず煩わしい手続きと思われてきました。



そこで登場したのがOpenIDです。



OpenIDとは


OpenIDはWebサービスごとにIDを作成しなくても予め所有しているIDがOpenID対応であればOpenIDに対応したサービスを利用する際にユーザ登録などの手間を省くことができます。



OpenIDの基本は認証を行うためのシステムなので機能的な制限を与えることはできません。



例えば「HogeサービスがTwitterの情報を取得できるようにしたい。ただし読み込みだけで書き込みの権限をHogeサービスには与えたくない。」といったような事はOpenIDでは実現できません。



そこで特定の機能のみのアクセスを認可する仕組みとしてOAuthが登場しました。



OAuthとは



特定の機能のみ認可するシステムがOAuthですがいくつかのデメリットがあります。



  • 実装が複雑(支援するライブラリーがたくさんある)

  • 基本的にWebサービス向け

  • デスクトップアプリケーションには不向き


OAuthはWebサービスで利用される事を想定しているため、デスクトップアプリケーションでOAuthを利用する場合は



ブラウザを経由するかアプリケーションに搭載した独自のブラウザを利用する必要があります。



簡単な図を書いてみました。


f:id:koujirou6218:20101214185715j:image


背景

Hoge解析でTwitterの情報を取得してHoge解析したい



  1. [ユーザ]Hoge解析でTwitterを利用する意志を示す(リンクをクリックするなど)

  2. [Hoge解析]ユーザからTwitter連携の意志を受け取ったのでTwitterに移動

  3. [ユーザ]Twitterにログインする

  4. [Twitter]Hoge解析が必要としている機能を許可するとTwitterはHoge解析にアクセストークンを渡す

  5. [Hoge解析]TwitterからもらったアクセストークンでTwitterの情報を取得する

  6. [ユーザ]Hoge解析を楽しむ



今後Hoge解析は6を繰り返して情報を取得する。



OAuthのメリット



  • Hoge解析にIDやパスワードを渡す必要がない

  • 必要な権限のみHogeサービスに渡せる

  • Hoge解析が権限を悪用してもTwitter側で拒否できる(パスワードやIDを変える必要がない)

  • 悪用時の被害を最低限に抑えられる



xAuthとは



xAuthはTwitterAPI認証時に以前はBASIC認証を利用していたのですがその代わりとして準備された物です。



xAuthはOAuthの簡易版というよりもBASIC認証にかなり近い物です。



これも簡単な図を書いてみました。


f:id:koujirou6218:20101214185716j:image



  1. [ユーザ]Hoge解析にTwitterで利用しているIDとパスワードを渡す

  2. [Hoge解析]渡されたIDとパスワードを利用してTwitterにアクセストークンを求める

  3. [Twitter]Hoge解析にアクセストークンを渡す

  4. [Hoge解析]TwitterからもらったアクセストークンでTwitterの情報を取得する

  5. [ユーザ]Hoge解析を楽しむ


(適当なタイミングHoge解析はIDとパスワードを破棄する)


このように一度WebサービスにIDとパスワードを渡さなければいけない点がOAuthと大きく異なります。



デメリット



  • Hoge解析がIDとパスワードを本当に破棄いているのかがユーザはわからない



メリット



  • 開発時にOAuthよりも認証方法が簡単

  • デスクトップアプリケーションでもブラウザなしで認証できる



OAuthとxAuthの違い



既にお分かりだと思いますが、xAuthはベーシック認証の拡張でありOAuthのようなセキュアなプロトコルではない点です。



OAuthは認証の過程で署名などがありアクセストークンの自体も保護されいるので非常にセキュアなプロトコルです。



しかしxAuthはIDとパスワードが平文で流れる可能性があり、Webサービスが確実にIDとパスワードを破棄したことを確認できません。



xAuthに限らず最近はOAuthを利用してあたかも通常のサービスに見せかけたSPAMや乗っ取りなどが発生しているのでOAuthを許可する時はどの権限を



渡そうとしているのかをよく確認してください。特に書き込み(write)のアクセス権を渡す場合は注意してください。



0 件のコメント:

コメントを投稿