Open棟梁Project - マイクロソフト系技術情報 Wiki
目次 †
概要 †
変遷 †
- 2009/4/23、OAuth 1.0のセキュリティ問題が判明した。この問題は、OAuth 1.0aで修正された。
- OAuth 2.0は次世代のOAuthプロトコルであり、OAuth 1.0とは後方互換性を持たない。
OAuth 1.0とOAuth 2.0の違い †
- HTTPSを必須にし、署名をなくし、トークン取得も簡略化
- アクセストークンのみでリソース取得が可能に
- Webアプリも含め、4つのクライアントプロファイルを仕様化
- Webサーバ(Web Server)
Webアプリケーション
- ユーザーエージェント(User-Agent)
JavaScript
- ネイティブアプリ(Native Application)
モバイルやデスクトップアプリ(ガイドライン程度しか定義されていない)
- 自立クライアント(Autonomous)
既存の認証フレームワークとSAMLなどのプロトコルを使って連携する場合のフロー。
OAuthの利用例 †
Instagramで共有した写真をFacebookやTwitterにも投稿 †
Instagramの設定画面から複数の外部サービスと連携するように設定できる。
- InstagramはOAuthを用いて外部サービスに代理投稿するアクセス権限を受け取る。
- すると、Instagramは外部サービスに写真を投稿できるようになる。
Facebook Twitter IDでほかのサイトにログイン †
「Facebook IDでログイン」や「Twitter IDでログイン」といったボタンで利用されている。
- 本来、認証・ID連携のために設計されたものではないが、
- 外部サービスにユーザのプロフィール情報を取得するAPIが存在する場合、
このAPIへのアクセス権限を受け取ることで、認証・ID連携の代替が可能。
- 誤った使い方をして脆弱性を生み出しているケースも多い。
参考 †
OAuthのシーケンス †
Step 0:Client Registration †
準備
- クライアント登録の方法についてはOAuthの仕様では定められていない。
- OAuth Clientは、OAuth Serverに対してアプリ名やドメインなどを添えて自身を登録。
- 通常はOAuth Serverのデベロッパー向けサイトでOAuth Clientを登録する。
- Consumer KeyとConsumer Secret?
Step 1:Initiate †
シーケンスの開始
- 「Facebook IDでログイン」や「Twitter IDでログイン」といったボタンで開始する。
- OAuth ClientがResource OwnerからAPIアクセス権限の付与を受ける。
- OAuth 1.0とOAuth 2.0とでフローは多少異なる。
Step 2:Authorization Request †
ユーザ認証とアクセス権限付与のリクエスト
- 事前にOAuth ClientはOAuth Serverにアクセスし、未認可のRequest Tokenを取得する。
- OAuth ClientはClient識別情報を付与しResource OwnerをOAuth Serverにリダイレクト
- OAuth 2.0:Request Token
- OAuth 2.0:Client識別情報をclient_idパラメータに含める。
Step 3:Authenticate User & Get Approval †
ユーザ認証とアクセス権限付与
- リダイレクトを受けたOAuth Serverは
- ユーザを認証(OAuthの仕様には含まれない)する(Request Tokenを認可済にする)。
- ユーザが使用するOAuth ClientにOAuth Serverへのアクセス権限付与を許可する。
Step 4:Authorization Response †
ユーザ認証とアクセス権限付与の結果をレスポンス
- OAuth ServerはResource OwnerをOAuth Clientにリダイレクトして戻す。
- リダイレクトURLには、アクセス権限を示すトークンが含まれる。
- OAuth 1.0では、認可済Request Token
- OAuth 2.0では、Client特性により、2種類のトークン形式が存在する。
- Web : code
- Native : access_token
Step 5:Obtain Access Token †
- OAuth 1.0 :
Request Tokenを実際のアクセス権を示すAccess Tokenと交換する
- OAuth 2.0 :
Step 4でaccess_tokenを得ていない場合、
受け取った「アクセス権限を示すトークン」とAccess Tokenを交換。
Step 6:API Access †
APIへのアクセス
- Access Token使ってAPIにアクセス。
- Access Tokenは期限切れ、無効化されるまで利用可能。
参考 †
参考 †