- 追加された行はこの色です。
- 削除された行はこの色です。
[[Open棟梁Project>http://opentouryo.osscons.jp/]] - [[マイクロソフト系技術情報 Wiki>http://techinfoofmicrosofttech.osscons.jp/]]
-[[戻る>クレームベース認証#k66961ce]]
* 目次 [#qc1590f2]
#contents
*概要 [#ff7046a2]
-[[戻る>クレームベース認証#k66961ce]]
*変遷 [#k3aeda5b]
-2009/4/23、OAuth 1.0のセキュリティ問題が判明した。この問題は、OAuth 1.0aで修正された。
-OAuth 2.0は次世代のOAuthプロトコルであり、OAuth 1.0とは後方互換性を持たない。
**OAuth 1.0 [#eb4fd2ef]
-OpenIDを使ってTwitterやMa.gnoliaのAPIの認証委譲する方法を議論を開始。
-2007/4にOAuthのコミュニティが誕生。
-2007/7にOAuthの仕様の草案が完成。
-2007/10/3に、より正式な仕様であるOAuth Core 1.0 の最終草案がリリース。
-2008/11、第73回のIETF会合でOAuthの非公式会合も開かれ、~
さらなる標準化に向けてIETFにOAuthプロトコルを提案するかどうかを議論。
-2009/4/23、OAuth 1.0のセキュリティ問題が判明。この問題は、OAuth 1.0aで修正された。
**OAuth 2.0 [#h8e684ba]
-OAuth 1.0とは後方互換性を持たない。
-次世代のOAuthプロトコルとして、2012年にRFCとして発行された。
**OAuth 1.0とOAuth 2.0の違い [#s44d10cb]
-OAuth 2.0でWebサービスの利用方法はどう変わるか(2-3)- @IT~
http://www.atmarkit.co.jp/fsmart/articles/oauth2/02.html
+HTTPSを必須にし、署名をなくし、トークン取得も簡略化
+アクセストークンのみでリソース取得が可能に
+Webアプリも含め、4つのクライアントプロファイルを仕様化
++Webサーバ(Web Server)~
Webアプリケーション
++ユーザーエージェント(User-Agent) ~
JavaScript
++ネイティブアプリ(Native Application)~
モバイルやデスクトップアプリ(ガイドライン程度しか定義されていない)
++自立クライアント(Autonomous)~
既存の認証フレームワークとSAMLなどのプロトコルを使って連携する場合のフロー。
**Bearer Token Usage [#c954189a]
-OAuth 2.0のbearer tokenの最新仕様を調べたらあまり変わってなかった - r-weblife~
http://d.hatena.ne.jp/ritou/20110402/1301679908
--The OAuth 2.0 Authorization Framework: Bearer Token Usage(日本語)~
http://openid-foundation-japan.github.io/rfc6750.ja.html
*OAuthの利用例 [#nb5a56c4]
**Instagramで共有した写真をFacebookやTwitterにも投稿 [#y50e86a3]
Instagramの設定画面から複数の外部サービスと連携するように設定できる。
-InstagramはOAuthを用いて外部サービスに代理投稿するアクセス権限を受け取る。
-すると、Instagramは外部サービスに写真を投稿できるようになる。
-外部サービス
--Twitter
--Facebook
**Facebook Twitter IDでほかのサイトにログイン [#d2a34d61]
「Facebook IDでログイン」や「Twitter IDでログイン」といったボタンで利用されている。
-本来、認証・ID連携のために設計されたものではないが、
--外部サービスにユーザのプロフィール情報を取得するAPIが存在する場合、~
このAPIへのアクセス権限を受け取ることで、認証・ID連携の代替が可能。
--誤った使い方をして脆弱性を生み出しているケースも多い。
-外部サービスの認証を信頼する場合
--Twitter
--Facebook
**参考 [#ae2863db]
-デジタル・アイデンティティ技術最新動向(1):~
「OAuth」の基本動作を知る (1-2) - @IT~
http://www.atmarkit.co.jp/ait/articles/1208/27/news129.html
*The OAuth 2.0 Authorization Framework [#v698197b]
-RFC 6749 - The OAuth 2.0 Authorization Framework~
https://tools.ietf.org/html/rfc6749
*OAuthのシーケンス [#e2a0d0ab]
-OAuth 2.0 Core & Bearer Spec (RFC 6749 & RFC 6750) 翻訳公開! - OAuth.jp~
http://oauth.jp/blog/2013/01/23/oauth-20-core-bearer-spec-rfc-rfc-6749-rfc-67/
--The OAuth 2.0 Authorization Framework~
http://openid-foundation-japan.github.io/rfc6749.ja.html
--The OAuth 2.0 Authorization Framework: Bearer Token Usage(日本語)~
http://openid-foundation-japan.github.io/rfc6750.ja.html
-OpenID Connect 入門 〜コンシューマーにおけるID連携のトレンド〜~
OAuth 2.0 Authorization Code Flow~
http://www.slideshare.net/kura_lab/openid-connect-id/21
**OAuth 2.0のフロー定義 [#kd90c6bf]
OAuth 2.0仕様には4つのフローが定義されている。~
これらのフローのタイプを「グラント種別」と呼ばれる。
**Step 0:Client Registration [#m875246b]
-IPA ISEC セキュア・プログラミング講座:~
Webアプリケーション編 第8章 マッシュアップ:サーバサイドマッシュアップ~
https://www.ipa.go.jp/security/awareness/vendor/programmingv2/contents/709.html
以下の様な「グラント種別」がある模様。
***Authorization Codeグラント種別 [#y8bf613e]
-RFC 6749 - The OAuth 2.0 Authorization Framework~
4.1. Authorization Code Grant~
https://tools.ietf.org/html/rfc6749#section-4.1
--Authorization Code Flow
+----------+
| Resource |
| Owner |
| |
+----------+
^
|
(B)
+----|-----+ Client Identifier +---------------+
| -+----(A)-- & Redirection URI ---->| |
| User- | | Authorization |
| Agent -+----(B)-- User authenticates --->| Server |
| | | |
| -+----(C)-- Authorization Code ---<| |
+-|----|---+ +---------------+
| | ^ v
(A) (C) | |
| | | |
^ v | |
+---------+ | |
| |>---(D)-- Authorization Code ---------' |
| Client | & Redirection URI |
| | |
| |<---(E)----- Access Token -------------------'
+---------+ (w/ Optional Refresh Token)
Note: The lines illustrating steps (A), (B), and (C) are broken into two parts as they pass through the user-agent.
***Implicitグラント種別 [#h347a7c6]
-RFC 6749 - The OAuth 2.0 Authorization Framework~
4.2. Implicit Grant~
https://tools.ietf.org/html/rfc6749#section-4.2
--Implicit Grant Flow
+----------+
| Resource |
| Owner |
| |
+----------+
^
|
(B)
+----|-----+ Client Identifier +---------------+
| -+----(A)-- & Redirection URI --->| |
| User- | | Authorization |
| Agent -|----(B)-- User authenticates -->| Server |
| | | |
| |<---(C)--- Redirection URI ----<| |
| | with Access Token +---------------+
| | in Fragment
| | +---------------+
| |----(D)--- Redirection URI ---->| Web-Hosted |
| | without Fragment | Client |
| | | Resource |
| (F) |<---(E)------- Script ---------<| |
| | +---------------+
+-|--------+
| |
(A) (G) Access Token
| |
^ v
+---------+
| |
| Client |
| |
+---------+
Note: The lines illustrating steps (A) and (B) are broken into two parts as they pass through the user-agent.
***Resource Owner Password Credentialsグラント種別 [#i2483bc0]
-RFC 6749 - The OAuth 2.0 Authorization Framework~
4.3. Resource Owner Password Credentials Grant~
https://tools.ietf.org/html/rfc6749#section-4.3
--Resource Owner Password Credentials Flow
+----------+
| Resource |
| Owner |
| |
+----------+
v
| Resource Owner
(A) Password Credentials
|
v
+---------+ +---------------+
| |>--(B)---- Resource Owner ------->| |
| | Password Credentials | Authorization |
| Client | | Server |
| |<--(C)---- Access Token ---------<| |
| | (w/ Optional Refresh Token) | |
+---------+ +---------------+
-補足
--ASP.NET Identityによる認証サイト = Authorization Server に該当する。
--Clientは、Authorization Serverの情報を元に認可をする連携サイト(, システム, アプリ)。
--Resource OwnerはUserIDやPasswordを保持しているユーザやシステム。
***Client Credentialsグラント種別 [#ka6e3a8f]
-RFC 6749 - The OAuth 2.0 Authorization Framework~
4.3. Resource Owner Password Credentials Grant~
https://tools.ietf.org/html/rfc6749#section-4.4
--Client Credentials Grant
+---------+ +---------------+
| | | |
| |>--(A)- Client Authentication --->| Authorization |
| Client | | Server |
| |<--(B)---- Access Token ---------<| |
| | | |
+---------+ +---------------+
***RFC 6749 - 4.3. Resource Owner Password Credentials Grant [#a91d9d2e]
-memo: Force.com : REST API 開発 ユーザ名パスワード OAuth 認証~
http://vaindespair.blogspot.jp/2013/01/blog-post_5252.html
--Understanding the Username-Password OAuth Authentication Flow~
Force.com REST API Developer Guide | Salesforce Developers~
https://developer.salesforce.com/docs/atlas.en-us.api_rest.meta/api_rest/intro_understanding_username_password_oauth_flow.htm
-Resource Owner Password Credentials Grantについては[[コチラ>#i2483bc0]]。
***RFC 6750 - Bearer Token Usage [#d65223fc]
-RFC 6750 - The OAuth 2.0 Authorization Framework: Bearer Token Usage~
https://tools.ietf.org/html/rfc6750
+--------+ +---------------+
| |--(A)- Authorization Request ->| Resource |
| | | Owner |
| |<-(B)-- Authorization Grant ---| |
| | +---------------+
| |
| | +---------------+
| |--(C)-- Authorization Grant -->| Authorization |
| Client | | Server |
| |<-(D)----- Access Token -------| |
| | +---------------+
| |
| | +---------------+
| |--(E)----- Access Token ------>| Resource |
| | | Server |
| |<-(F)--- Protected Resource ---| |
+--------+ +---------------+
*OAuthのFlow [#e2a0d0ab]
**Authorization Code Flow [#u3db1d50]
***Step 0:Client Registration [#m875246b]
準備
-クライアント登録の方法についてはOAuthの仕様では定められていない。
-OAuth Clientは、OAuth Serverに対してアプリ名やドメインなどを添えて自身を登録。
-通常はOAuth Serverのデベロッパー向けサイトでOAuth Clientを登録する。
-Consumer KeyとConsumer Secret?
**Step 1:Initiate [#gdaa4c60]
シーケンスの開始
***Step 1:Initiate [#gdaa4c60]
Flowの開始
-「Facebook IDでログイン」や「Twitter IDでログイン」といったボタンで開始する。
-OAuth ClientがResource OwnerからAPIアクセス権限の付与を受ける。
-OAuth 1.0とOAuth 2.0とでフローは多少異なる。
**Step 2:Authorization Request [#vc5a8f68]
***Step 2:Authorization Request [#vc5a8f68]
ユーザ認証とアクセス権限付与のリクエスト
-事前にOAuth ClientはOAuth Serverにアクセスし、未認可のRequest Tokenを取得する。
-OAuth ClientはClient識別情報を付与しResource OwnerをOAuth Serverにリダイレクト
-どのようなClient識別情報が付与されるかは、OAuth 1.0とOAuth 2.0で異なる。
--OAuth 2.0:Request Token
--OAuth 2.0:Client識別情報をclient_idパラメータに含める。
**Step 3:Authenticate User & Get Approval [#i686ca48]
***Step 3:Authenticate User & Get Approval [#i686ca48]
ユーザ認証とアクセス権限付与
-リダイレクトを受けたOAuth Serverは
--ユーザを認証(OAuthの仕様には含まれない)する(Request Tokenを認可済にする)。
--ユーザが使用するOAuth ClientにOAuth Serverへのアクセス権限付与を許可する。
**Step 4:Authorization Response [#g8be73c7]
***Step 4:Authorization Response [#g8be73c7]
ユーザ認証とアクセス権限付与の結果をレスポンス
-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 [#v305cf48]
***Step 5:Obtain Access Token [#v305cf48]
-OAuth 1.0 :~
Request Tokenを実際のアクセス権を示すAccess Tokenと交換する
-OAuth 2.0 :~
Step 4でaccess_tokenを得ていない場合、~
受け取った「アクセス権限を示すトークン」とAccess Tokenを交換。
**Step 6:API Access [#tc7739ce]
***Step 6:API Access [#tc7739ce]
APIへのアクセス
-Access Token使ってAPIにアクセス。
-Access Tokenは期限切れ、無効化されるまで利用可能。
**参考 [#t918c804]
-デジタル・アイデンティティ技術最新動向(1):~
「OAuth」の基本動作を知る (2-2) - @IT~
http://www.atmarkit.co.jp/ait/articles/1208/27/news129_2.html
*参考 [#sd7d7875]
-第1回 OAuthとは?―OAuthの概念とOAuthでできること:~
ゼロから学ぶOAuth|gihyo.jp … 技術評論社~
http://gihyo.jp/dev/feature/01/oauth/0001?page=2
**1.0 [#b6b38b34]
*参考 [#sd7d7875]
-OAuth Core 1.0~
http://oauth.net/core/1.0/
-OAuth - Wikipedia~
https://ja.wikipedia.org/wiki/OAuth#OAuth_2.0
-ゼロから学ぶOAuth:特集|gihyo.jp … 技術評論社~
http://gihyo.jp/dev/feature/01/oauth
--第1回 OAuthとは?―OAuthの概念とOAuthでできること~
http://gihyo.jp/dev/feature/01/oauth/0001
--第2回 OAuth Consumerの実装(入門 : OAuth Access Tokenの取得と利用)~
http://gihyo.jp/dev/feature/01/oauth/0002
--第3回 OAuth Consumerの実装(応用 : smart.fm APIおよびGoogle Data APIsの利用)~
http://gihyo.jp/dev/feature/01/oauth/0003
--第4回 OAuth Service Providerの実装~
http://gihyo.jp/dev/feature/01/oauth/0004
**2.0 [#q09835d5]
-デジタル・アイデンティティ技術最新動向 連載インデックス - @IT~
http://www.atmarkit.co.jp/fsecurity/index/index_digid.html
--デジタル・アイデンティティ技術最新動向(1):「OAuth」の基本動作を知る - @IT
---http://www.atmarkit.co.jp/ait/articles/1208/27/news129.html
---http://www.atmarkit.co.jp/ait/articles/1208/27/news129_2.html
-OAuth 2.0でWebサービスの利用方法はどう変わるか - @IT
--http://www.atmarkit.co.jp/fsmart/articles/oauth2/01.html
--http://www.atmarkit.co.jp/fsmart/articles/oauth2/02.html
--http://www.atmarkit.co.jp/fsmart/articles/oauth2/03.html
-OpenID Connect 入門 〜コンシューマーにおけるID連携のトレンド〜~
OAuth 2.0 Authorization Code Flow~
http://www.slideshare.net/kura_lab/openid-connect-id/21