OAuth 2.0
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
開始行:
「[[マイクロソフト系技術情報 Wiki>http://techinfoofmicros...
-[[戻る>OAuth]]
* 目次 [#qc1590f2]
#contents
*概要 [#ff7046a2]
OAuth 2.0は、認証ではなく認可のためのプロトコル(権限委譲...
-[[Authorization Server>#a2ff14fb]]の設置により、[[Resour...
-これにより、[[Resource OwnerのCredentials>#m0ca183e]]を[...
-[[Resource Owner>#qe857228]]は、[[Authorization Server>#...
*詳細 [#r0608873]
**登場人物 [#zb38b595]
***Resource Owner [#qe857228]
-実体例:ユーザ(人間)
-やること:~
[[Resource OwnerのCredentials>#m0ca183e]]を入力してリソー...
***Client [#b4b4c0bd]
-実体例:
--Resource ServerにアクセスするClient。
--Program
---Webブラウザ
---スマホ ネイティブ
---Webアプリケーション
---, etc.
-やること:
--Authorization Serverの認可を受けてResource Serverのリソ...
--認可レイヤの設置により、認証・認可の役割が分割されたた...
Resource Owner, Authorization Server, Resource Serverを繋...
忙しいプログラムになった(だから[[OAuth]]はClient側でも難...
***Authorization Server [#a2ff14fb]
-実体例:認証・認可のサーバー機能(Webアプリケーション)
-やること:
--Authorization Server用の認証チケットの発行を行う。
--Resource Server用の[[Access Token>#jb722a87]]の発行を行...
***Resource Server [#n1c92dc2]
-実体例:
--リソースアクセスを提供するサーバー機能(WebAPIなど)
--Authorization Serverと別でも良い
-やること:~
[[Access Token>#jb722a87]]を受けてリソースアクセスを提供...
**プロトコル・フロー [#g723492b]
+--------+ +---------------+
| |--(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 ---| |
+--------+ +---------------+
***(A) Authorization Request [#b5726bb0]
Resource Ownerは、Clientを経由して、Authorization Server...
***(B) Authorization Grant [#m6a4436a]
認証後、Clientは、Authorization Serverの[[認可エンドポイ...
***(C) Authorization Grant [#m041f58e]
Clientは、Authorization Serverの[[Tokenエンドポイント>#s8...
***(D) Access Token [#pcf3e60f]
Authorization Serverは、Clientと 認可グラントが正当であれ...
***(E) Access Token, (F) Protected Resource [#b1d7b608]
Clientは、Resource Serverに[[Access Token>#jb722a87]]を提...
***★ 参考 [#p9f64095]
[[ココのスライド>#s6e988c9]]が参考になる。
**グラント種別毎のフロー [#c8a23ceb]
以下、4つのグラント種別に対応するフローがある。
***Authorization Codeグラント種別 [#yfeb403d]
-概要
--[[Confidentialクライアント>#q08180e3]]のサーバ側から使...
---認証画面で[[Resource Ownerの認証>#m0ca183e]]をした後、
---[[認可エンドポイント>#s820b1ab]]の"画面"でリソース・ア...
---[[Redirectエンドポイント>#ja887509]]で取得した仲介コー...
---[[Tokenエンドポイント>#s820b1ab]]で仲介コードを使用して~
[[Access Token>#jb722a87]]と[[Refresh Token>#r3e36f53]]を...
---最後に[[Access Token>#jb722a87]]を使用してResource Ser...
-特徴
--Authorization ServerはClientを認証する。
---仲介コード(code)を使用することで、[[Access Token>#jb...
---[[Access Token>#jb722a87]]の露見防止には、Clientのエン...
-通信~
[[RFC>#v698197b]]を読んだほうが良い。
--[[認可リクエスト>http://openid-foundation-japan.github....
---[[認可レスポンス>http://openid-foundation-japan.github...
--[[アクセストークン・リクエスト>http://openid-foundation...
---[[アクセストークン・レスポンス>http://openid-foundatio...
***Implicitグラント種別 [#m5c2d510]
-概要
--[[Publicクライアント>#q08180e3]]のクライアント側から使...
---認証画面で[[Resource Ownerの認証>#m0ca183e]]をした後、
---[[認可エンドポイント>#s820b1ab]]でリソース・アクセスを...
---(この間のRedirectで、[[Access Token>#jb722a87]]が露見...
---[[Redirectエンドポイント>#ja887509]]では、[[Access Tok...
---最後に[[Access Token>#jb722a87]]を使用してResource Ser...
-特徴
--Authorization ServerはClientを認証しない。
---[[認可エンドポイント>#s820b1ab]]と[[Redirectエンドポイ...
---反面、仲介コード(code)を使用しないため、[[Access Tok...
User Agentに露見するセキュリティのトレードオフがある([[1...
---[[Access Token>#jb722a87]]の拡散防止には、Clientのエン...
-通信~
[[RFC>#v698197b]]を読んだほうが良い。
--[[認可リクエスト>http://openid-foundation-japan.github....
---[[アクセストークン・レスポンス>http://openid-foundatio...
***Resource Owner Password Credentialsグラント種別 [#zfff...
-概要
--[[ベース クライアント セキュリティ モデル]]みたいなもん...
以下のようにあるため、本グラント種別の利用は、特殊なケー...
>「この認可タイプを使用可能にするときには特に注意を払い、~
他のフローが実行可能でない場合にのみ許可する必要がありま...
--[[Resource OwnerのCredentials>#m0ca183e]]をClientに送る。
--Clientは、[[Resource OwnerのCredentials>#m0ca183e]]を[[...
--Clientは[[Access Token>#jb722a87]]を取得してResource Se...
-特徴
--[[Resource OwnerのCredentials>#m0ca183e]]をClientに送っ...
--従って、[[Confidentialクライアント>#q08180e3]]から使用...
---Resource OwnerとClientの間に高い信頼関係があること。
---Authorization Serverは、Clientを認証すること。
--以下のような、特殊なケースに留める。
---OAuth2.0 への移行段階。
---[[Authorization Codeグラント種別>#yfeb403d]]のフローを...
例えば、[[Publicクライアント>#q08180e3]]からClientのサー...
-通信~
[[RFC>#v698197b]]を読んだほうが良い。
--[[認可リクエストとレスポンス>http://openid-foundation-j...
--[[アクセストークン・リクエスト>http://openid-foundation...
---[[アクセストークン・レスポンス>http://openid-foundatio...
***Client Credentialsグラント種別 [#o9473080]
-概要
--[[サーバ信頼セキュリティ モデル]]みたいなもん。
--Clientは、[[ClientのCredentials>#i7b73962]]を[[認可エン...
--Clientは[[Access Token>#jb722a87]]を取得してResource Se...
-特徴
--Clientと Authorization Server間で調整済みの、~
Clientの保有するリソースにアクセスする場合に使用する。
--従って、[[Confidentialクライアント>#q08180e3]]から使用...
---Authorization Serverは、Clientを認証すること。
-通信~
[[RFC>#v698197b]]を読んだほうが良い。
--[[認可リクエストとレスポンス>http://openid-foundation-j...
--[[アクセストークン・リクエスト>http://openid-foundation...
---[[アクセストークン・レスポンス>http://openid-foundatio...
**Clientについて [#aab02700]
***種類 [#q08180e3]
-[[Client Credentials>#i7b73962]]の機密性保持能力による分類
--Confidentialクライアント~
[[Client Credentials>#i7b73962]]の機密性を維持可能なClient
---アクセスの制限されたサーバー
--Publicクライアント~
[[Client Credentials>#i7b73962]]の機密性を維持不可能なCli...
---WWWブラウザ
---ネイティブ・アプリケーション
---Resource Ownerのデバイスにインストールされたアプリケー...
-Client Profile(クライアント属性)による分類
--Confidentialクライアント
---Webアプリケーション
--Publicクライアント
---ネイティブ・アプリケーション
---SPAなどのUser Agentベースアプリケーション(WWWブラウザ...
***事前登録 [#keaaae10]
-[[クライアント識別子>#i7b73962]]を使用して、Clientを事前...
-[[Authorization Code>#yfeb403d]]や、[[Implicitグラント種...
--client_idに対応する[[Redirectエンドポイント>#ja887509]]...
--動的設定では部分一致をサポートするが、オープンリダイレ...
**認可用のCredentials(Token) [#vc4e6813]
***Access Token [#jb722a87]
[[RFC>http://openid-foundation-japan.github.io/rfc6749.ja...
-保護されたリソースにアクセスするために使用されるCredenti...
-Authorization ServerによってClientに対して発行されるラン...
-アクセス範囲とアクセス期間を表す。
-発行はResource Ownerによって許可される。
-Authorization Serverの[[Tokenエンドポイント>#s820b1ab]]...
-Resource Serverへの要求に対して、以下の様な形式で送信さ...
GET /resource/1 HTTP/1.1
Host: example.com
Authorization: Bearer XXXXXXXXXX
***Refresh Token [#r3e36f53]
[[RFC>http://openid-foundation-japan.github.io/rfc6749.ja...
-[[Access Token>#jb722a87]]の無効化・期限切れの際に新しい...
-Authorization ServerによってClientに対して発行されるラン...
-[[Refresh Token>#r3e36f53]]の発行はオプションであり、[[A...
-[[Access Token>#jb722a87]]と異なり、Resource Serverに送...
***[[Accessトークンのタイプ>トークン#b38de47f]] [#i5f79713]
**認証用のCredentials [#wdad8a4e]
***Resource Owner [#m0ca183e]
Resource Ownerの認証用のCredentialsはOAuth 2.0 仕様の外~
(Authorization ServerはユーザID、パスワードなどを使用し...
***Client [#i7b73962]
Clientの認証用のCredentials~
(Authorization ServerはこれによりClientを認証)
-クライアント識別子~
クライアント識別子(2つのセット)の情報は、URIで送信しな...
--client_id(1つだけの場合、URIに露見する)
--client_secret(URIに露見しない、させない)
-認証方法
--ベーシック認証などのパスワードベースのHTTP認証スキーム
--HTTP認証スキームを使用できない場合にPOSTを使用する(非...
**エンドポイントの種類 [#h4dcb0c7]
URLは仕様で規定されない。
***Authorization Server上のエンドポイント [#s820b1ab]
-認可エンドポイント
--概要
---Resource Ownerを認可するエンドポイント
---認証画面ではないので注意(認証結果を見て認可する)。
---仲介コードや、[[Access Token>#jb722a87]]を発行するエン...
--特徴
---HTTPSのGETを使用する。
---[[Authorization Code>#yfeb403d]]や、[[Implicitグラント...
-Tokenエンドポイント
--概要~
[[Access Token>#jb722a87]]・[[Refresh Token>#r3e36f53]]を...
--特徴
---HTTPSのPOSTを使用する。
---[[Implicitグラント種別>#m5c2d510]]を除く、他の全てのグ...
[[Implicitグラント種別>#m5c2d510]]では、[[認可エンドポイ...
***Client上のエンドポイント [#ja887509]
Redirectエンドポイント
-概要~
エンドポイント・コンテンツを返す。
-特徴
--HTTPSのGETを使用する。
--[[Authorization Code>#yfeb403d]]や、[[Implicitグラント...
-注意点
--[[Authorization Code>#yfeb403d]]では、なるべくエンドポ...
--Implicitグラントなど、Tokenがコンテンツに露見してしまう...
---コンテンツには、3rd partyのscriptを含めるべきでない。
---Client自身のscriptが初回に実行されるようにすること。
---URIからTokenを抽出し、露見しないように他へPOSTしBodyに...
**Requestパラメタ [#xd504f07]
***response_typeパラメタ [#l1d2572d]
[[認可エンドポイント>#s820b1ab]]にGETで送付する。~
以下のように、グラント種別毎に、決まったパラメタを指定す...
|項番|グラント種別|パラメタ値|意味|h
|1|[[Authorization Code>#yfeb403d]]|code|仲介コードを要求|
|2|[[Implicit>#m5c2d510]]|token|[[Access Token>#jb722a87...
-参考:[[OpenID Connect]]によって、[[追加された、response...
***client_id, client_secretパラメタ [#ha9ff05e]
Clientの識別や認証のために、色々な所で使用されるパラメタ。
-[[コチラ>#i7b73962]]を参照。
-用途
--[[認可エンドポイント>#s820b1ab]]
---client_idとredirect_uriの対応をチェックする。
--[[Redirectエンドポイント>#ja887509]]
---次の[[Tokenエンドポイント>#s820b1ab]]に渡す。
--[[Tokenエンドポイント>#s820b1ab]]
---Clientの認証を行なう。
***redirect_uriパラメタ [#t71d0e79]
client_idに対応する[[Redirectエンドポイント>#ja887509]]を...
-[[Redirectエンドポイント>#ja887509]]を使用する、[[Author...
-[[認可エンドポイント>#s820b1ab]]にGETを送付するときに、...
-指定した際は、[[Tokenエンドポイント>#s820b1ab]]まで、引...
[[認可エンドポイント>#s820b1ab]]に渡した値と同じであるこ...
***grant_typeパラメタ [#p23cde9e]
[[Tokenエンドポイント>#s820b1ab]]にPOSTを送付するときに指...
以下のように、グラント種別毎に、決まったパラメタを指定す...
|項番|グラント種別|パラメタ値|h
|1|[[Authorization Code>#yfeb403d]]|authorization_code|
|2|[[Resource Owner Password Credentials>#zfff6f89]]|pas...
|3|[[Client Credentials>#o9473080]]|client_credentials|
|4|上記1、2、3のグラント種別でRefreshトークンを使用す...
***scopeパラメタ [#qd3e1385]
-[[Authorization Codeグラント種別>#yfeb403d]]
--[[認可エンドポイント>#s820b1ab]]にGETで送付する。
--送信前に、画面で認可scopeをResource Ownerに提示する。
-[[Implicitグラント種別>#m5c2d510]]
--[[認可エンドポイント>#s820b1ab]]にGETで送付する。
--異なるscopeの[[Access Token>#jb722a87]]を取得した場合、...
-[[Resource Owner Password Credentialsグラント種別>#zfff6...
--[[Tokenエンドポイント>#s820b1ab]]にPOSTで送付する。
--異なるscopeの[[Access Token>#jb722a87]]を取得した場合、...
-[[Client Credentialsグラント種別>#o9473080]]
--[[Tokenエンドポイント>#s820b1ab]]にPOSTで送付する。
--異なるscopeの[[Access Token>#jb722a87]]を取得した場合、...
***stateパラメタ [#wbfa8d08]
[[CSRF>#bd3a67e8]]のセキュリティ対策に使用が推奨されるパ...
-概要
--[[認可エンドポイント>#s820b1ab]]にGETを送付するときに指...
--[[Redirectエンドポイント>#ja887509]]を使用する、[[Autho...
--以降のやり取りでも引き継がれて使用される(値は変更しな...
-要件
--推測困難な文字列である必要がある。(ワンタイム性は必須...
-参考
--OAuth 2.0のstateとredirect_uriとOpenID Connectのnonceと...
http://d.hatena.ne.jp/ritou/20121008/1349695124
---CSRF対策のトークンをワンタイムにしたら意図に反して脆弱...
http://www.tokumaru.org/d/20110127.html
**Responseパラメタ [#idca7e43]
code, access_token, refresh_token
***[[認可エンドポイント>#s820b1ab]] [#d9f01ea3]
|項番|パラメタ値|意味|h
|1|code|access_tokenを取得するためのtokenで、&br;[[Autho...
***[[Tokenエンドポイント>#s820b1ab]] [#u2222b3c]
|項番|パラメタ値|意味|h
|2|access_token|[[コチラを参照>#jb722a87]]|
|3|refresh_token|[[コチラを参照>#r3e36f53]]|
**Request & Responseの例 [#y77c50cc]
***[[認可エンドポイント>#s820b1ab]] [#y09a8594]
-[[Authorization Code>#yfeb403d]]
--リクエスト例
GET /authorize?response_type=code&client_id=XXXX&state=...
&redirect_uri=http... HTTP/1.1
Host: ...
--成功レスポンス例
HTTP/1.1 302 Found
Location: http...?code=YYYY&state=ZZZZ
--失敗レスポンス例
HTTP/1.1 302 Found
Location: http...#error=access_denied&state=YYY
-[[Implicit>#m5c2d510]]
--リクエスト例
GET /authorize?response_type=token&client_id=XXX&state=...
Host: ...
--成功レスポンス例
HTTP/1.1 302 Found
Location: http...#access_token=XXX&state=YYY&token_type...
--失敗レスポンス例
HTTP/1.1 302 Found
Location: http...#error=access_denied&state=YYY
***[[Tokenエンドポイント>#s820b1ab]] [#n037bd41]
-リクエスト例
--authorization_code
POST /token HTTP/1.1
Host: ...
Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW
Content-Type: application/x-www-form-urlencoded
grant_type=authorization_code&code=XXXX&redirect_uri=ht...
--refresh_token
POST /token HTTP/1.1
Host: server.example.com
Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW
Content-Type: application/x-www-form-urlencoded
grant_type=refresh_token&refresh_token=tGzv3JOkF0XG5Qx2...
-レスポンス例
--成功
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Cache-Control: no-store
Pragma: no-cache
{
"access_token":"XXX",
"token_type":"Bearer",
"expires_in":3600,
"refresh_token":"YYY",
"example_parameter":"ZZZ"
}
--失敗
HTTP/1.1 400 Bad Request
Content-Type: application/json;charset=UTF-8
Cache-Control: no-store
Pragma: no-cache
{
"error":"invalid_request"
}
*The OAuth 2.0 Authorization Framework [#v698197b]
-RFC 6749 - The OAuth 2.0 Authorization Framework~
https://tools.ietf.org/html/rfc6749
-OAuth 2.0 Core & Bearer Spec (RFC 6749 & RFC 6750) 翻訳...
http://oauth.jp/blog/2013/01/23/oauth-20-core-bearer-spec...
--The OAuth 2.0 Authorization Framework~
http://openid-foundation-japan.github.io/rfc6749.ja.html
--The OAuth 2.0 Authorization Framework: Bearer Token Usa...
http://openid-foundation-japan.github.io/rfc6750.ja.html
**RFC 6749 - OAuth 2.0のフロー定義 [#kd90c6bf]
OAuth 2.0仕様には4つのフローが定義されている。~
これらのフローのタイプを「グラント種別」と呼ばれる。
-IPA ISEC セキュア・プログラミング講座:~
Webアプリケーション編 第8章 マッシュアップ:サーバサイド...
https://www.ipa.go.jp/security/awareness/vendor/programmi...
以下の様な「グラント種別」がある模様。
***Authorization Codeグラント種別 [#y8bf613e]
-RFC 6749 - The OAuth 2.0 Authorization Framework > 4.1. ...
https://tools.ietf.org/html/rfc6749#section-4.1
--Authorization Code Flow
+----------+
| Resource |
| Owner |
| |
+----------+
^
|
(B)
+----|-----+ Client Identifier +----------...
| -+----(A)-- & Redirection URI ---->| ...
| User- | | Authoriza...
| Agent -+----(B)-- User authenticates --->| Serve...
| | | ...
| -+----(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 ...
***Implicitグラント種別 [#h347a7c6]
-RFC 6749 - The OAuth 2.0 Authorization Framework > 4.2. ...
https://tools.ietf.org/html/rfc6749#section-4.2
--Implicit Grant Flow
+----------+
| Resource |
| Owner |
| |
+----------+
^
|
(B)
+----|-----+ Client Identifier +-----------...
| -+----(A)-- & Redirection URI --->| ...
| User- | | Authorizat...
| Agent -|----(B)-- User authenticates -->| Server...
| | | ...
| |<---(C)--- Redirection URI ----<| ...
| | with Access Token +-----------...
| | in Fragment
| | +-----------...
| |----(D)--- Redirection URI ---->| Web-Host...
| | without Fragment | Client...
| | | Resourc...
| (F) |<---(E)------- Script ---------<| ...
| | +-----------...
+-|--------+
| |
(A) (G) Access Token
| |
^ v
+---------+
| |
| Client |
| |
+---------+
Note: The lines illustrating steps (A) and (B) are broken...
***Resource Owner Password Credentialsグラント種別 [#i248...
-RFC 6749 - The OAuth 2.0 Authorization Framework > 4.3. ...
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 | Authoriza...
| Client | | Serve...
| |<--(C)---- Access Token ---------<| ...
| | (w/ Optional Refresh Token) | ...
+---------+ +----------...
-参考
--memo: Force.com : REST API 開発 ユーザ名パスワード OAut...
http://vaindespair.blogspot.jp/2013/01/blog-post_5252.html
---Understanding the Username-Password OAuth Authenticati...
Force.com REST API Developer Guide | Salesforce Developers~
https://developer.salesforce.com/docs/atlas.en-us.api_res...
***Client Credentialsグラント種別 [#ka6e3a8f]
-RFC 6749 - The OAuth 2.0 Authorization Framework > 4.3. ...
https://tools.ietf.org/html/rfc6749#section-4.4
--Client Credentials Grant
+---------+ +----------...
| | | ...
| |>--(A)- Client Authentication --->| Authoriza...
| Client | | Serve...
| |<--(B)---- Access Token ---------<| ...
| | | ...
+---------+ +----------...
**RFC 6750 - [[Bearer Token>#i5f79713]] Usage [#d65223fc]
-RFC 6750 - The OAuth 2.0 Authorization Framework: Bearer...
https://tools.ietf.org/html/rfc6750
***概要 [#z2e4e62c]
-認可サーバーにより発行されたAccessトークンを、~
保護リソースエンドポイント (狭義の Web API) に渡す方法を...
-次の 3 つの方法を定義されている。
--[[Authorization Request Header Field>https://tools.ietf...
Authorization ヘッダに埋め込む方法
--[[Form-Encoded Body Parameter>https://tools.ietf.org/ht...
リクエスト・ボディに埋め込む方法
--[[URI Query Parameter>https://tools.ietf.org/html/rfc67...
クエリ・パラメタとして渡す方法
***フロー [#xf758bc1]
+--------+ +-------------...
| |--(A)- Authorization Request ->| Resource ...
| | | Owner ...
| |<-(B)-- Authorization Grant ---| ...
| | +-------------...
| |
| | +-------------...
| |--(C)-- Authorization Grant -->| Authorizatio...
| Client | | Server ...
| |<-(D)----- Access Token -------| ...
| | +-------------...
| |
| | +-------------...
| |--(E)----- Access Token ------>| Resource ...
| | | Server ...
| |<-(F)--- Protected Resource ---| ...
+--------+ +-------------...
*参考 [#sd7d7875]
-[[The OAuth 2.0 Authorization Framework>#v698197b]]
-OAuth - Wikipedia~
https://ja.wikipedia.org/wiki/OAuth
-OAuth 2.0でWebサービスの利用方法はどう変わるか(2-3)- ...
http://www.atmarkit.co.jp/fsmart/articles/oauth2/02.html
-OAuth 2.0の代表的な利用パターンを仕様から理解しよう - Bu...
http://www.buildinsider.net/enterprise/openid/oauth20
**@IT [#n0d6d892]
-デジタル・アイデンティティ技術最新動向 連載インデックス~
http://www.atmarkit.co.jp/fsecurity/index/index_digid.html
--デジタル・アイデンティティ技術最新動向(1):「OAuth」...
---http://www.atmarkit.co.jp/ait/articles/1208/27/news129...
---http://www.atmarkit.co.jp/ait/articles/1208/27/news129...
-OAuth 2.0でWebサービスの利用方法はどう変わるか
--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
**Qiita [#rde475d1]
-OAuth 2.0 の仕様を読むために~
http://qiita.com/awakia/items/66975de18ba25f18a961
-色々な OAuth のフローと doorkeeper gem での実装~
http://qiita.com/tyamagu2/items/5aafff7f6ae0a9ec94aa
-OAuth 2.0 全フローの図解と動画~
https://qiita.com/TakahikoKawasaki/items/200951e5b5929f84...
-IETF OAuth WGの仕様全部見る~
https://qiita.com/ritou/items/bbf7ffd001f30ec6facc
**slideshare [#o0d0ea56]
-今更聞けないOAuth2.0~
http://www.slideshare.net/ph1ph2sa25/oauth20-46144252
-OpenID Connect 入門~
〜コンシューマーにおけるID連携のトレンド〜~
OAuth 2.0 Authorization Code Flow~
http://www.slideshare.net/kura_lab/openid-connect-id/21
**インフル諸兄 [#ne5a0949]
***ritou [#p1bd361f]
-Authlete の OAuth 2.0 / OIDC 実装ナレッジ 完全に理解した~
https://ritou.hatenablog.com/entry/2018/10/02/013902
-ファーストパーティーなアプリが使うOAuth/OIDCについてのお...
https://ritou.hatenablog.com/entry/2019/03/03/023431
***TakahikoKawasaki [#m6ee5936]
-Qiita
--OAuth 2.0 の認可レスポンスとリダイレクトに関する説明~
https://qiita.com/TakahikoKawasaki/items/8567c80528da43c7...
--OAuth 2.0 のフローとクライアントタイプの関係~
https://qiita.com/TakahikoKawasaki/items/13a3e935b29cd9a9...
--『いまどきの OAuth / OpenID Connect (OIDC) 一挙おさらい...
https://qiita.com/TakahikoKawasaki/items/90ef63fc4f267b33...
-SlideShare~
--いまどきの OAuth / OpenID Connect (OIDC) 一挙おさらい (...
https://www.slideshare.net/tkudo/oauth-openid-connect-2020
-YouTube~
--Authlete~
https://www.youtube.com/channel/UCERMcUO2vR7F96Qd-BZbiwA~
いまどきの OAuth / OpenID Connect (OIDC)
---(1) 2010 年代前半の OAuth 2.0 / OIDC~
https://www.youtube.com/watch?v=7GEpd3TZga8
---(2) OAuth 2.0 Security Best Current Practice~
https://www.youtube.com/watch?v=xHn9Rc1R5ow
---(3) Financial-grade API~
https://www.youtube.com/watch?v=y5EXBEptKLQ
---(4) Lodging Intent Pattern~
https://www.youtube.com/watch?v=rQJ-nrqiXIk
---(5) “Device Flow” / CIBA / Identity Assurance~
https://www.youtube.com/watch?v=ESD83vkbveM
---(6) まとめ~
https://www.youtube.com/watch?v=VYeEdx3JVaw
**内部リンク [#rc0cd72f]
***[[OAuth 2.0 拡張]] [#s986286e]
***[[OAuth 2.0 セキュリティ関連トピック]] [#o1f40fef]
***[[OAuth 2.0 のトークン]] [#r6efdef3]
***[[技術文書中での Shall / Should / May]] [#gb7e1f1d]
***[[Microsoft Azure Active Directory]] [#f331a146]
**テストサイトなど [#gf957f66]
-OAuth 2.0 Playground~
https://www.oauth.com/playground/
-OAuth 2.0 debugger~
https://oauthdebugger.com/
-OpenID Connect debugger~
https://oidcdebugger.com/
-Documentation | Okta Developer~
https://developer.okta.com/documentation/
----
Tags: [[:IT国際標準]], [[:認証基盤]], [[:クレームベース認...
終了行:
「[[マイクロソフト系技術情報 Wiki>http://techinfoofmicros...
-[[戻る>OAuth]]
* 目次 [#qc1590f2]
#contents
*概要 [#ff7046a2]
OAuth 2.0は、認証ではなく認可のためのプロトコル(権限委譲...
-[[Authorization Server>#a2ff14fb]]の設置により、[[Resour...
-これにより、[[Resource OwnerのCredentials>#m0ca183e]]を[...
-[[Resource Owner>#qe857228]]は、[[Authorization Server>#...
*詳細 [#r0608873]
**登場人物 [#zb38b595]
***Resource Owner [#qe857228]
-実体例:ユーザ(人間)
-やること:~
[[Resource OwnerのCredentials>#m0ca183e]]を入力してリソー...
***Client [#b4b4c0bd]
-実体例:
--Resource ServerにアクセスするClient。
--Program
---Webブラウザ
---スマホ ネイティブ
---Webアプリケーション
---, etc.
-やること:
--Authorization Serverの認可を受けてResource Serverのリソ...
--認可レイヤの設置により、認証・認可の役割が分割されたた...
Resource Owner, Authorization Server, Resource Serverを繋...
忙しいプログラムになった(だから[[OAuth]]はClient側でも難...
***Authorization Server [#a2ff14fb]
-実体例:認証・認可のサーバー機能(Webアプリケーション)
-やること:
--Authorization Server用の認証チケットの発行を行う。
--Resource Server用の[[Access Token>#jb722a87]]の発行を行...
***Resource Server [#n1c92dc2]
-実体例:
--リソースアクセスを提供するサーバー機能(WebAPIなど)
--Authorization Serverと別でも良い
-やること:~
[[Access Token>#jb722a87]]を受けてリソースアクセスを提供...
**プロトコル・フロー [#g723492b]
+--------+ +---------------+
| |--(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 ---| |
+--------+ +---------------+
***(A) Authorization Request [#b5726bb0]
Resource Ownerは、Clientを経由して、Authorization Server...
***(B) Authorization Grant [#m6a4436a]
認証後、Clientは、Authorization Serverの[[認可エンドポイ...
***(C) Authorization Grant [#m041f58e]
Clientは、Authorization Serverの[[Tokenエンドポイント>#s8...
***(D) Access Token [#pcf3e60f]
Authorization Serverは、Clientと 認可グラントが正当であれ...
***(E) Access Token, (F) Protected Resource [#b1d7b608]
Clientは、Resource Serverに[[Access Token>#jb722a87]]を提...
***★ 参考 [#p9f64095]
[[ココのスライド>#s6e988c9]]が参考になる。
**グラント種別毎のフロー [#c8a23ceb]
以下、4つのグラント種別に対応するフローがある。
***Authorization Codeグラント種別 [#yfeb403d]
-概要
--[[Confidentialクライアント>#q08180e3]]のサーバ側から使...
---認証画面で[[Resource Ownerの認証>#m0ca183e]]をした後、
---[[認可エンドポイント>#s820b1ab]]の"画面"でリソース・ア...
---[[Redirectエンドポイント>#ja887509]]で取得した仲介コー...
---[[Tokenエンドポイント>#s820b1ab]]で仲介コードを使用して~
[[Access Token>#jb722a87]]と[[Refresh Token>#r3e36f53]]を...
---最後に[[Access Token>#jb722a87]]を使用してResource Ser...
-特徴
--Authorization ServerはClientを認証する。
---仲介コード(code)を使用することで、[[Access Token>#jb...
---[[Access Token>#jb722a87]]の露見防止には、Clientのエン...
-通信~
[[RFC>#v698197b]]を読んだほうが良い。
--[[認可リクエスト>http://openid-foundation-japan.github....
---[[認可レスポンス>http://openid-foundation-japan.github...
--[[アクセストークン・リクエスト>http://openid-foundation...
---[[アクセストークン・レスポンス>http://openid-foundatio...
***Implicitグラント種別 [#m5c2d510]
-概要
--[[Publicクライアント>#q08180e3]]のクライアント側から使...
---認証画面で[[Resource Ownerの認証>#m0ca183e]]をした後、
---[[認可エンドポイント>#s820b1ab]]でリソース・アクセスを...
---(この間のRedirectで、[[Access Token>#jb722a87]]が露見...
---[[Redirectエンドポイント>#ja887509]]では、[[Access Tok...
---最後に[[Access Token>#jb722a87]]を使用してResource Ser...
-特徴
--Authorization ServerはClientを認証しない。
---[[認可エンドポイント>#s820b1ab]]と[[Redirectエンドポイ...
---反面、仲介コード(code)を使用しないため、[[Access Tok...
User Agentに露見するセキュリティのトレードオフがある([[1...
---[[Access Token>#jb722a87]]の拡散防止には、Clientのエン...
-通信~
[[RFC>#v698197b]]を読んだほうが良い。
--[[認可リクエスト>http://openid-foundation-japan.github....
---[[アクセストークン・レスポンス>http://openid-foundatio...
***Resource Owner Password Credentialsグラント種別 [#zfff...
-概要
--[[ベース クライアント セキュリティ モデル]]みたいなもん...
以下のようにあるため、本グラント種別の利用は、特殊なケー...
>「この認可タイプを使用可能にするときには特に注意を払い、~
他のフローが実行可能でない場合にのみ許可する必要がありま...
--[[Resource OwnerのCredentials>#m0ca183e]]をClientに送る。
--Clientは、[[Resource OwnerのCredentials>#m0ca183e]]を[[...
--Clientは[[Access Token>#jb722a87]]を取得してResource Se...
-特徴
--[[Resource OwnerのCredentials>#m0ca183e]]をClientに送っ...
--従って、[[Confidentialクライアント>#q08180e3]]から使用...
---Resource OwnerとClientの間に高い信頼関係があること。
---Authorization Serverは、Clientを認証すること。
--以下のような、特殊なケースに留める。
---OAuth2.0 への移行段階。
---[[Authorization Codeグラント種別>#yfeb403d]]のフローを...
例えば、[[Publicクライアント>#q08180e3]]からClientのサー...
-通信~
[[RFC>#v698197b]]を読んだほうが良い。
--[[認可リクエストとレスポンス>http://openid-foundation-j...
--[[アクセストークン・リクエスト>http://openid-foundation...
---[[アクセストークン・レスポンス>http://openid-foundatio...
***Client Credentialsグラント種別 [#o9473080]
-概要
--[[サーバ信頼セキュリティ モデル]]みたいなもん。
--Clientは、[[ClientのCredentials>#i7b73962]]を[[認可エン...
--Clientは[[Access Token>#jb722a87]]を取得してResource Se...
-特徴
--Clientと Authorization Server間で調整済みの、~
Clientの保有するリソースにアクセスする場合に使用する。
--従って、[[Confidentialクライアント>#q08180e3]]から使用...
---Authorization Serverは、Clientを認証すること。
-通信~
[[RFC>#v698197b]]を読んだほうが良い。
--[[認可リクエストとレスポンス>http://openid-foundation-j...
--[[アクセストークン・リクエスト>http://openid-foundation...
---[[アクセストークン・レスポンス>http://openid-foundatio...
**Clientについて [#aab02700]
***種類 [#q08180e3]
-[[Client Credentials>#i7b73962]]の機密性保持能力による分類
--Confidentialクライアント~
[[Client Credentials>#i7b73962]]の機密性を維持可能なClient
---アクセスの制限されたサーバー
--Publicクライアント~
[[Client Credentials>#i7b73962]]の機密性を維持不可能なCli...
---WWWブラウザ
---ネイティブ・アプリケーション
---Resource Ownerのデバイスにインストールされたアプリケー...
-Client Profile(クライアント属性)による分類
--Confidentialクライアント
---Webアプリケーション
--Publicクライアント
---ネイティブ・アプリケーション
---SPAなどのUser Agentベースアプリケーション(WWWブラウザ...
***事前登録 [#keaaae10]
-[[クライアント識別子>#i7b73962]]を使用して、Clientを事前...
-[[Authorization Code>#yfeb403d]]や、[[Implicitグラント種...
--client_idに対応する[[Redirectエンドポイント>#ja887509]]...
--動的設定では部分一致をサポートするが、オープンリダイレ...
**認可用のCredentials(Token) [#vc4e6813]
***Access Token [#jb722a87]
[[RFC>http://openid-foundation-japan.github.io/rfc6749.ja...
-保護されたリソースにアクセスするために使用されるCredenti...
-Authorization ServerによってClientに対して発行されるラン...
-アクセス範囲とアクセス期間を表す。
-発行はResource Ownerによって許可される。
-Authorization Serverの[[Tokenエンドポイント>#s820b1ab]]...
-Resource Serverへの要求に対して、以下の様な形式で送信さ...
GET /resource/1 HTTP/1.1
Host: example.com
Authorization: Bearer XXXXXXXXXX
***Refresh Token [#r3e36f53]
[[RFC>http://openid-foundation-japan.github.io/rfc6749.ja...
-[[Access Token>#jb722a87]]の無効化・期限切れの際に新しい...
-Authorization ServerによってClientに対して発行されるラン...
-[[Refresh Token>#r3e36f53]]の発行はオプションであり、[[A...
-[[Access Token>#jb722a87]]と異なり、Resource Serverに送...
***[[Accessトークンのタイプ>トークン#b38de47f]] [#i5f79713]
**認証用のCredentials [#wdad8a4e]
***Resource Owner [#m0ca183e]
Resource Ownerの認証用のCredentialsはOAuth 2.0 仕様の外~
(Authorization ServerはユーザID、パスワードなどを使用し...
***Client [#i7b73962]
Clientの認証用のCredentials~
(Authorization ServerはこれによりClientを認証)
-クライアント識別子~
クライアント識別子(2つのセット)の情報は、URIで送信しな...
--client_id(1つだけの場合、URIに露見する)
--client_secret(URIに露見しない、させない)
-認証方法
--ベーシック認証などのパスワードベースのHTTP認証スキーム
--HTTP認証スキームを使用できない場合にPOSTを使用する(非...
**エンドポイントの種類 [#h4dcb0c7]
URLは仕様で規定されない。
***Authorization Server上のエンドポイント [#s820b1ab]
-認可エンドポイント
--概要
---Resource Ownerを認可するエンドポイント
---認証画面ではないので注意(認証結果を見て認可する)。
---仲介コードや、[[Access Token>#jb722a87]]を発行するエン...
--特徴
---HTTPSのGETを使用する。
---[[Authorization Code>#yfeb403d]]や、[[Implicitグラント...
-Tokenエンドポイント
--概要~
[[Access Token>#jb722a87]]・[[Refresh Token>#r3e36f53]]を...
--特徴
---HTTPSのPOSTを使用する。
---[[Implicitグラント種別>#m5c2d510]]を除く、他の全てのグ...
[[Implicitグラント種別>#m5c2d510]]では、[[認可エンドポイ...
***Client上のエンドポイント [#ja887509]
Redirectエンドポイント
-概要~
エンドポイント・コンテンツを返す。
-特徴
--HTTPSのGETを使用する。
--[[Authorization Code>#yfeb403d]]や、[[Implicitグラント...
-注意点
--[[Authorization Code>#yfeb403d]]では、なるべくエンドポ...
--Implicitグラントなど、Tokenがコンテンツに露見してしまう...
---コンテンツには、3rd partyのscriptを含めるべきでない。
---Client自身のscriptが初回に実行されるようにすること。
---URIからTokenを抽出し、露見しないように他へPOSTしBodyに...
**Requestパラメタ [#xd504f07]
***response_typeパラメタ [#l1d2572d]
[[認可エンドポイント>#s820b1ab]]にGETで送付する。~
以下のように、グラント種別毎に、決まったパラメタを指定す...
|項番|グラント種別|パラメタ値|意味|h
|1|[[Authorization Code>#yfeb403d]]|code|仲介コードを要求|
|2|[[Implicit>#m5c2d510]]|token|[[Access Token>#jb722a87...
-参考:[[OpenID Connect]]によって、[[追加された、response...
***client_id, client_secretパラメタ [#ha9ff05e]
Clientの識別や認証のために、色々な所で使用されるパラメタ。
-[[コチラ>#i7b73962]]を参照。
-用途
--[[認可エンドポイント>#s820b1ab]]
---client_idとredirect_uriの対応をチェックする。
--[[Redirectエンドポイント>#ja887509]]
---次の[[Tokenエンドポイント>#s820b1ab]]に渡す。
--[[Tokenエンドポイント>#s820b1ab]]
---Clientの認証を行なう。
***redirect_uriパラメタ [#t71d0e79]
client_idに対応する[[Redirectエンドポイント>#ja887509]]を...
-[[Redirectエンドポイント>#ja887509]]を使用する、[[Author...
-[[認可エンドポイント>#s820b1ab]]にGETを送付するときに、...
-指定した際は、[[Tokenエンドポイント>#s820b1ab]]まで、引...
[[認可エンドポイント>#s820b1ab]]に渡した値と同じであるこ...
***grant_typeパラメタ [#p23cde9e]
[[Tokenエンドポイント>#s820b1ab]]にPOSTを送付するときに指...
以下のように、グラント種別毎に、決まったパラメタを指定す...
|項番|グラント種別|パラメタ値|h
|1|[[Authorization Code>#yfeb403d]]|authorization_code|
|2|[[Resource Owner Password Credentials>#zfff6f89]]|pas...
|3|[[Client Credentials>#o9473080]]|client_credentials|
|4|上記1、2、3のグラント種別でRefreshトークンを使用す...
***scopeパラメタ [#qd3e1385]
-[[Authorization Codeグラント種別>#yfeb403d]]
--[[認可エンドポイント>#s820b1ab]]にGETで送付する。
--送信前に、画面で認可scopeをResource Ownerに提示する。
-[[Implicitグラント種別>#m5c2d510]]
--[[認可エンドポイント>#s820b1ab]]にGETで送付する。
--異なるscopeの[[Access Token>#jb722a87]]を取得した場合、...
-[[Resource Owner Password Credentialsグラント種別>#zfff6...
--[[Tokenエンドポイント>#s820b1ab]]にPOSTで送付する。
--異なるscopeの[[Access Token>#jb722a87]]を取得した場合、...
-[[Client Credentialsグラント種別>#o9473080]]
--[[Tokenエンドポイント>#s820b1ab]]にPOSTで送付する。
--異なるscopeの[[Access Token>#jb722a87]]を取得した場合、...
***stateパラメタ [#wbfa8d08]
[[CSRF>#bd3a67e8]]のセキュリティ対策に使用が推奨されるパ...
-概要
--[[認可エンドポイント>#s820b1ab]]にGETを送付するときに指...
--[[Redirectエンドポイント>#ja887509]]を使用する、[[Autho...
--以降のやり取りでも引き継がれて使用される(値は変更しな...
-要件
--推測困難な文字列である必要がある。(ワンタイム性は必須...
-参考
--OAuth 2.0のstateとredirect_uriとOpenID Connectのnonceと...
http://d.hatena.ne.jp/ritou/20121008/1349695124
---CSRF対策のトークンをワンタイムにしたら意図に反して脆弱...
http://www.tokumaru.org/d/20110127.html
**Responseパラメタ [#idca7e43]
code, access_token, refresh_token
***[[認可エンドポイント>#s820b1ab]] [#d9f01ea3]
|項番|パラメタ値|意味|h
|1|code|access_tokenを取得するためのtokenで、&br;[[Autho...
***[[Tokenエンドポイント>#s820b1ab]] [#u2222b3c]
|項番|パラメタ値|意味|h
|2|access_token|[[コチラを参照>#jb722a87]]|
|3|refresh_token|[[コチラを参照>#r3e36f53]]|
**Request & Responseの例 [#y77c50cc]
***[[認可エンドポイント>#s820b1ab]] [#y09a8594]
-[[Authorization Code>#yfeb403d]]
--リクエスト例
GET /authorize?response_type=code&client_id=XXXX&state=...
&redirect_uri=http... HTTP/1.1
Host: ...
--成功レスポンス例
HTTP/1.1 302 Found
Location: http...?code=YYYY&state=ZZZZ
--失敗レスポンス例
HTTP/1.1 302 Found
Location: http...#error=access_denied&state=YYY
-[[Implicit>#m5c2d510]]
--リクエスト例
GET /authorize?response_type=token&client_id=XXX&state=...
Host: ...
--成功レスポンス例
HTTP/1.1 302 Found
Location: http...#access_token=XXX&state=YYY&token_type...
--失敗レスポンス例
HTTP/1.1 302 Found
Location: http...#error=access_denied&state=YYY
***[[Tokenエンドポイント>#s820b1ab]] [#n037bd41]
-リクエスト例
--authorization_code
POST /token HTTP/1.1
Host: ...
Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW
Content-Type: application/x-www-form-urlencoded
grant_type=authorization_code&code=XXXX&redirect_uri=ht...
--refresh_token
POST /token HTTP/1.1
Host: server.example.com
Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW
Content-Type: application/x-www-form-urlencoded
grant_type=refresh_token&refresh_token=tGzv3JOkF0XG5Qx2...
-レスポンス例
--成功
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Cache-Control: no-store
Pragma: no-cache
{
"access_token":"XXX",
"token_type":"Bearer",
"expires_in":3600,
"refresh_token":"YYY",
"example_parameter":"ZZZ"
}
--失敗
HTTP/1.1 400 Bad Request
Content-Type: application/json;charset=UTF-8
Cache-Control: no-store
Pragma: no-cache
{
"error":"invalid_request"
}
*The OAuth 2.0 Authorization Framework [#v698197b]
-RFC 6749 - The OAuth 2.0 Authorization Framework~
https://tools.ietf.org/html/rfc6749
-OAuth 2.0 Core & Bearer Spec (RFC 6749 & RFC 6750) 翻訳...
http://oauth.jp/blog/2013/01/23/oauth-20-core-bearer-spec...
--The OAuth 2.0 Authorization Framework~
http://openid-foundation-japan.github.io/rfc6749.ja.html
--The OAuth 2.0 Authorization Framework: Bearer Token Usa...
http://openid-foundation-japan.github.io/rfc6750.ja.html
**RFC 6749 - OAuth 2.0のフロー定義 [#kd90c6bf]
OAuth 2.0仕様には4つのフローが定義されている。~
これらのフローのタイプを「グラント種別」と呼ばれる。
-IPA ISEC セキュア・プログラミング講座:~
Webアプリケーション編 第8章 マッシュアップ:サーバサイド...
https://www.ipa.go.jp/security/awareness/vendor/programmi...
以下の様な「グラント種別」がある模様。
***Authorization Codeグラント種別 [#y8bf613e]
-RFC 6749 - The OAuth 2.0 Authorization Framework > 4.1. ...
https://tools.ietf.org/html/rfc6749#section-4.1
--Authorization Code Flow
+----------+
| Resource |
| Owner |
| |
+----------+
^
|
(B)
+----|-----+ Client Identifier +----------...
| -+----(A)-- & Redirection URI ---->| ...
| User- | | Authoriza...
| Agent -+----(B)-- User authenticates --->| Serve...
| | | ...
| -+----(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 ...
***Implicitグラント種別 [#h347a7c6]
-RFC 6749 - The OAuth 2.0 Authorization Framework > 4.2. ...
https://tools.ietf.org/html/rfc6749#section-4.2
--Implicit Grant Flow
+----------+
| Resource |
| Owner |
| |
+----------+
^
|
(B)
+----|-----+ Client Identifier +-----------...
| -+----(A)-- & Redirection URI --->| ...
| User- | | Authorizat...
| Agent -|----(B)-- User authenticates -->| Server...
| | | ...
| |<---(C)--- Redirection URI ----<| ...
| | with Access Token +-----------...
| | in Fragment
| | +-----------...
| |----(D)--- Redirection URI ---->| Web-Host...
| | without Fragment | Client...
| | | Resourc...
| (F) |<---(E)------- Script ---------<| ...
| | +-----------...
+-|--------+
| |
(A) (G) Access Token
| |
^ v
+---------+
| |
| Client |
| |
+---------+
Note: The lines illustrating steps (A) and (B) are broken...
***Resource Owner Password Credentialsグラント種別 [#i248...
-RFC 6749 - The OAuth 2.0 Authorization Framework > 4.3. ...
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 | Authoriza...
| Client | | Serve...
| |<--(C)---- Access Token ---------<| ...
| | (w/ Optional Refresh Token) | ...
+---------+ +----------...
-参考
--memo: Force.com : REST API 開発 ユーザ名パスワード OAut...
http://vaindespair.blogspot.jp/2013/01/blog-post_5252.html
---Understanding the Username-Password OAuth Authenticati...
Force.com REST API Developer Guide | Salesforce Developers~
https://developer.salesforce.com/docs/atlas.en-us.api_res...
***Client Credentialsグラント種別 [#ka6e3a8f]
-RFC 6749 - The OAuth 2.0 Authorization Framework > 4.3. ...
https://tools.ietf.org/html/rfc6749#section-4.4
--Client Credentials Grant
+---------+ +----------...
| | | ...
| |>--(A)- Client Authentication --->| Authoriza...
| Client | | Serve...
| |<--(B)---- Access Token ---------<| ...
| | | ...
+---------+ +----------...
**RFC 6750 - [[Bearer Token>#i5f79713]] Usage [#d65223fc]
-RFC 6750 - The OAuth 2.0 Authorization Framework: Bearer...
https://tools.ietf.org/html/rfc6750
***概要 [#z2e4e62c]
-認可サーバーにより発行されたAccessトークンを、~
保護リソースエンドポイント (狭義の Web API) に渡す方法を...
-次の 3 つの方法を定義されている。
--[[Authorization Request Header Field>https://tools.ietf...
Authorization ヘッダに埋め込む方法
--[[Form-Encoded Body Parameter>https://tools.ietf.org/ht...
リクエスト・ボディに埋め込む方法
--[[URI Query Parameter>https://tools.ietf.org/html/rfc67...
クエリ・パラメタとして渡す方法
***フロー [#xf758bc1]
+--------+ +-------------...
| |--(A)- Authorization Request ->| Resource ...
| | | Owner ...
| |<-(B)-- Authorization Grant ---| ...
| | +-------------...
| |
| | +-------------...
| |--(C)-- Authorization Grant -->| Authorizatio...
| Client | | Server ...
| |<-(D)----- Access Token -------| ...
| | +-------------...
| |
| | +-------------...
| |--(E)----- Access Token ------>| Resource ...
| | | Server ...
| |<-(F)--- Protected Resource ---| ...
+--------+ +-------------...
*参考 [#sd7d7875]
-[[The OAuth 2.0 Authorization Framework>#v698197b]]
-OAuth - Wikipedia~
https://ja.wikipedia.org/wiki/OAuth
-OAuth 2.0でWebサービスの利用方法はどう変わるか(2-3)- ...
http://www.atmarkit.co.jp/fsmart/articles/oauth2/02.html
-OAuth 2.0の代表的な利用パターンを仕様から理解しよう - Bu...
http://www.buildinsider.net/enterprise/openid/oauth20
**@IT [#n0d6d892]
-デジタル・アイデンティティ技術最新動向 連載インデックス~
http://www.atmarkit.co.jp/fsecurity/index/index_digid.html
--デジタル・アイデンティティ技術最新動向(1):「OAuth」...
---http://www.atmarkit.co.jp/ait/articles/1208/27/news129...
---http://www.atmarkit.co.jp/ait/articles/1208/27/news129...
-OAuth 2.0でWebサービスの利用方法はどう変わるか
--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
**Qiita [#rde475d1]
-OAuth 2.0 の仕様を読むために~
http://qiita.com/awakia/items/66975de18ba25f18a961
-色々な OAuth のフローと doorkeeper gem での実装~
http://qiita.com/tyamagu2/items/5aafff7f6ae0a9ec94aa
-OAuth 2.0 全フローの図解と動画~
https://qiita.com/TakahikoKawasaki/items/200951e5b5929f84...
-IETF OAuth WGの仕様全部見る~
https://qiita.com/ritou/items/bbf7ffd001f30ec6facc
**slideshare [#o0d0ea56]
-今更聞けないOAuth2.0~
http://www.slideshare.net/ph1ph2sa25/oauth20-46144252
-OpenID Connect 入門~
〜コンシューマーにおけるID連携のトレンド〜~
OAuth 2.0 Authorization Code Flow~
http://www.slideshare.net/kura_lab/openid-connect-id/21
**インフル諸兄 [#ne5a0949]
***ritou [#p1bd361f]
-Authlete の OAuth 2.0 / OIDC 実装ナレッジ 完全に理解した~
https://ritou.hatenablog.com/entry/2018/10/02/013902
-ファーストパーティーなアプリが使うOAuth/OIDCについてのお...
https://ritou.hatenablog.com/entry/2019/03/03/023431
***TakahikoKawasaki [#m6ee5936]
-Qiita
--OAuth 2.0 の認可レスポンスとリダイレクトに関する説明~
https://qiita.com/TakahikoKawasaki/items/8567c80528da43c7...
--OAuth 2.0 のフローとクライアントタイプの関係~
https://qiita.com/TakahikoKawasaki/items/13a3e935b29cd9a9...
--『いまどきの OAuth / OpenID Connect (OIDC) 一挙おさらい...
https://qiita.com/TakahikoKawasaki/items/90ef63fc4f267b33...
-SlideShare~
--いまどきの OAuth / OpenID Connect (OIDC) 一挙おさらい (...
https://www.slideshare.net/tkudo/oauth-openid-connect-2020
-YouTube~
--Authlete~
https://www.youtube.com/channel/UCERMcUO2vR7F96Qd-BZbiwA~
いまどきの OAuth / OpenID Connect (OIDC)
---(1) 2010 年代前半の OAuth 2.0 / OIDC~
https://www.youtube.com/watch?v=7GEpd3TZga8
---(2) OAuth 2.0 Security Best Current Practice~
https://www.youtube.com/watch?v=xHn9Rc1R5ow
---(3) Financial-grade API~
https://www.youtube.com/watch?v=y5EXBEptKLQ
---(4) Lodging Intent Pattern~
https://www.youtube.com/watch?v=rQJ-nrqiXIk
---(5) “Device Flow” / CIBA / Identity Assurance~
https://www.youtube.com/watch?v=ESD83vkbveM
---(6) まとめ~
https://www.youtube.com/watch?v=VYeEdx3JVaw
**内部リンク [#rc0cd72f]
***[[OAuth 2.0 拡張]] [#s986286e]
***[[OAuth 2.0 セキュリティ関連トピック]] [#o1f40fef]
***[[OAuth 2.0 のトークン]] [#r6efdef3]
***[[技術文書中での Shall / Should / May]] [#gb7e1f1d]
***[[Microsoft Azure Active Directory]] [#f331a146]
**テストサイトなど [#gf957f66]
-OAuth 2.0 Playground~
https://www.oauth.com/playground/
-OAuth 2.0 debugger~
https://oauthdebugger.com/
-OpenID Connect debugger~
https://oidcdebugger.com/
-Documentation | Okta Developer~
https://developer.okta.com/documentation/
----
Tags: [[:IT国際標準]], [[:認証基盤]], [[:クレームベース認...
ページ名: