「[[マイクロソフト系技術情報 Wiki>http://techinfoofmicrosofttech.osscons.jp/]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。

-[[戻る>OpenID / OAuth / OpenID Connect]]
-[[戻る>OAuth 2.0]]

* 目次 [#q668539e]
#contents

*概要 [#he82b607]
OAuth 2.0には、様々な拡張仕様がある。

*拡張のフロー [#a928aa75]
以下のような拡張フローがある。

*その他のフロー [#a928aa75]
その他にも、以下のようなフローがある。

**[[JWTを使用したフロー>JWTとOAuth2.0]] [#x249e0e5]

***[[JWT bearer token authorizationグラント種別>JWTとOAuth2.0#f5007063]] [#y0f15b12]

***[[JWT Secured Authorization Request (JAR)>JWTとOAuth2.0#bdaa0ed5]] [#mfd0576e]

***[[OAuth2.0 Proof of Possession>JWTとOAuth2.0#u8ebfddc]] [#v22d1559]

**[[スマホ向けフロー>UserAgentでOAuth2のTokenを取得するベスト・プラクティス#m0aacf50]] [#kf23d0ff]

***[[スマホ向けベストプラクティス (RFC 8252 ... OAuth 2.0 for Native Apps)>OAuth 2.0 for Native Apps]] [#w3e356fb]

***[[認可コード横取り攻撃への対抗策 (RFC 7636 ... OAuth PKCE)>OAuth PKCE]] [#ec698d28]

**その他のデバイス向けフロー [#u7974975]
***[[OAuth 2.0 Device Flow>#b53eb0b8]] [#l14e2ae9]
「Redirect フロー」ではなく「Decoupled フロー」を使用。

***%%[[OAuth 2.0 Device Flow]]%% [#l14e2ae9]
http://self-issued.info/?p=1959

と言った理由で、[[以下>#l14e2ae9]]に変更される。

***[[OAuth 2.0 Device Authorization Grant]] [#g7ba4478]

***[[CIBA(Client Initiated Backchannel Authentication)]] [#a36cb842]

*新しい仕様 [#z5a41bc7]
その他、新しい仕様も策定されている。

**OAuth 2.0 拡張で追加された仕様 [#gc724ffd]

***[[トークン取り消し (RFC 7009 ... Token Revocation)>OAuth 2.0 Token Revocation]] [#i4195867]

***[[トークン情報取得 (RFC 7662 ... Token Introspection)>OAuth 2.0 Token Introspection]] [#m4ddb086]

***[[各種クライアント認証>JWTとOAuth2.0#pebd83d3]] [#t68364d7]

**[[OpenID Connect]]で追加された仕様 [#ta009e42]

***[[応答タイプ (response_type)の追加>OAuth 2.0 Multiple Response Type Encoding Practices]] [#c0f7842f]

***[[応答モード (response_mode)の新設>OAuth 2.0 Form Post Response Mode]] [#m6ef2050]

***[[claimsリクエスト・パラメタ>OpenID Connect#e26320e4]] [#l4d1b973]
***[[claimsリクエスト・パラメタ>OpenID Connect#nd004268]] [#l4d1b973]

***[[認証コンテキストクラス>OpenID Connect#ja81c8fa]] [#v9600ae2]
***[[リクエスト・オブジェクト>OpenID Connect#m6d72953]] [#f04145a9]

**[[Financial API (FAPI)で追加された仕様>Financial API (FAPI)#l4147461]] [#oddb9c14]
***[[リクエスト・オブジェクト>OpenID Connect#q19eeb33]] [#f04145a9]

*セキュリティ [#w4627adf]
セキュリティに関する考察と、考慮点。
**[[Financial API (FAPI)>Financial API (FAPI)#l4147461]]で追加された仕様 [#oddb9c14]
***[[FAPI Part 1>FAPI Part 1 (Read Only API Security Profile)#i8ef7e99]] [#q5522efe]
***[[FAPI Part 2>FAPI Part 2 (Read and Write API Security Profile)#i8ef7e99]] [#oa771b04]

**認証に使用する [#ff0c2b15]
**その他の拡張仕様 [#r44b96bf]

***問題点 [#xcb4d357]
認証ではなく認可のためのプロトコル(権限委譲プロトコル)である。~
OAuth 2.0の仕様を熟読してもOAuth2.0を認証に使用しても問題ないように見える。
***[[JWTとOAuth2.0]] [#q1643d9b]

以下のBlogを参照して、
***[[Token Binding]] [#v6e16f50]

-認可のためのプロトコルのOAuthが認証に使えることの説明 | ありえるえりあ~
http://dev.ariel-networks.com/wp/archives/258~

--「OAuthが権限委譲(認可伝達)プロトコルなのは事実です。~
・・・権限委譲プロトコルのひとつの利用方法に過ぎないからです。」

--「権限委譲プロトコルOAuthで、事実上、認証伝達ができる。」

の部分を見ると、全権限の認可は≒認証で、~
OAuth 2.0による認証も、OAuth 2.0の一利用方法と捉えることができる。

従って、「OAuth 2.0は認証で使用できる。」と考える。~
ただし、「OAuth 2.0には以下の問題がある。」と考える。

-Openな仕掛けで、インターネット上の野良Client、Resource Ownerから攻撃され得る。
-また、Authorization Serverに脆弱性があった場合、攻撃対象になり得る。
-さらに、Clientの作り次第で、[[Access Token>#jb722a87]]が露見し得る。

このため、これらの問題がある状態で、OAuth 2.0を認証に使用すると、

>「Resource Serverで公開しているリソースへのアクセスを認可する。」

という限られた権限より、(システムにログインできるということは)大きい権限を委譲することになるので、~
この発言の背景では、「認可に比べ、認証に使用した場合、リスクが大きい。」という問題が懸念されている。

***対応方法 [#la5fb715]
従って、この問題は、

-r-weblife
--OAuth 2.0 Implicit Flowをユーザー認証に利用する際のリスクと対策方法について #idcon~
http://d.hatena.ne.jp/ritou/20120206/1328484575
--GoogleのOAuth 2.0実装におけるToken置換攻撃の防ぎ方~
http://d.hatena.ne.jp/ritou/20120702/1341235859

以下のように対策できる。

-ImplicitをAuthorization Codeに変更する。
--Implicitを利用している場合、Authorization Codeを利用できないか確認する。
--Authorization Codeであれば、[[Access Token>#jb722a87]]の露見の可能性は低い(ただし、Clientの作り次第)。

-OAuth2を拡張して、
--[[Bearer TokenをJWTアサーションに変更する。>JWTとOAuth2.0#y9c24d21]]
--[[OAuth 2.0 拡張で追加された仕様>#f7c32a8e]]をサポートする。
--[[OpenID Connect]]をサポートする。

**参考 [#o3895e58]
-今更聞けないOAuth2.0 - セキュリティ対策~
http://www.slideshare.net/ph1ph2sa25/oauth20-46144252/54

-OAuth 2.0の概要とセキュリティ~
http://www.slideshare.net/charlier-shoe/oauth-20-29540466

-第3回 Webセキュリティのおさらい~
その3 CSRF・オープンリダイレクト・クリックジャッキング:~
JavaScriptセキュリティの基礎知識|gihyo.jp … 技術評論社~
--http://gihyo.jp/dev/serial/01/javascript-security/0003?page=1
--http://gihyo.jp/dev/serial/01/javascript-security/0003?page=2

-GoogleのOAuth 2.0実装におけるToken置換攻撃の防ぎ方 - r-weblife~
http://d.hatena.ne.jp/ritou/20120702/1341235859
-HTTPS でも Full URL が漏れる?OAuth の Code も漏れるんじゃね??~
http://oauth.jp/blog/2016/07/27/https-full-url-leaks/

***[[UserAgentでOAuth2のTokenを取得するベスト・プラクティス]] [#efffc2bf]

***[[OAuth 2.0 の脅威モデルとセキュリティの考慮事項 (RFC 6819)>OAuth 2.0 Threat Model and Security Considerations]] [#x831a54c]

***OAuth 1.0 のほうが OAuth 2.0 より安全なの? [#bd33e119]
-OAuth 1.0 のほうが OAuth 2.0 より安全なの? - Qiita~
http://qiita.com/TakahikoKawasaki/items/3600b28af7b63671b968
--「OAuth 2.0 は OAuth 1.0 よりも安全ではない」とは言えない。
--OAuth 1.0 でClientを作る方こそ安全ではない。
--OAuth 1.0 ではなく OAuth 2.0 を採用するのが良い。

-OAuth 2.0 and the Road to Hell – hueniverse~
http://hueniverse.com/2012/07/26/oauth-2-0-and-the-road-to-hell/

*The OAuth 2.0 Authorization Framework [#n3873207]
-RFC 6749 - The OAuth 2.0 Authorization Framework~
https://tools.ietf.org/html/rfc6749

-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

**RFC 6749 - OAuth 2.0のフロー定義 [#g7821047]
OAuth 2.0仕様には4つのフローが定義されている。~
これらのフローのタイプを「グラント種別」と呼ばれる。

-IPA ISEC セキュア・プログラミング講座:~
Webアプリケーション編 第8章 マッシュアップ:サーバサイドマッシュアップ~
https://www.ipa.go.jp/security/awareness/vendor/programmingv2/contents/709.html

以下の様な「グラント種別」がある模様。

***Authorization Codeグラント種別 [#t756e577]
-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グラント種別 [#cf24d446]
-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グラント種別 [#jcb1236b]
-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)   |               |
 +---------+                                  +---------------+

-参考
--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

***Client Credentialsグラント種別 [#sda19d82]
-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 6750 - [[Bearer Token>#i5f79713]] Usage [#a3ec5cbb]
-RFC 6750 - The OAuth 2.0 Authorization Framework: Bearer Token Usage~
https://tools.ietf.org/html/rfc6750

***概要 [#yc6bf6dd]
-認可サーバーにより発行されたアクセストークンを、~
保護リソースエンドポイント (狭義の Web API) に渡す方法を定めた仕様

-次の 3 つの方法を定義されている。
--[[Authorization Request Header Field>https://tools.ietf.org/html/rfc6750#section-2.1]]~
Authorization ヘッダに埋め込む方法
--[[Form-Encoded Body Parameter>https://tools.ietf.org/html/rfc6750#section-2.2]]~
リクエスト・ボディに埋め込む方法
--[[URI Query Parameter>https://tools.ietf.org/html/rfc6750#section-2.3]]~
クエリ・パラメタとして渡す方法

***フロー [#r91d6399]
  +--------+                               +---------------+
  |        |--(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 ---|               |
  +--------+                               +---------------+

**その他 [#o5ba38b5]
***OAuth 2.0 Device Flow [#iaf6a197]
-draft-ietf-oauth-device-flow - OAuth 2.0 Device Flow for Browserless and Input Constrained Devices~
https://tools.ietf.org/html/draft-ietf-oauth-device-flow

-概要
--入力デバイスを持たないデバイスでOAuth2を行う場合のフロー。
--別のデバイスで入力を始めるための(C) User Code & Verification URI には、以下が使用できる。
---QRコードやNFC、
---e-mailやSMS(Remote Phishingに注意)

-フロー
      +----------+                                +----------------+
      |          |>---(A)-- Client Identifier --->|                |
      |          |                                |                |
      |          |<---(B)-- Verification Code, --<|                |
      |          |              User Code,        |                |
      |          |         & Verification URI     |                |
      |  Device  |                                |                |
      |  Client  |         Client Identifier &    |                |
      |          |>---(E)-- Verification Code --->|                |
      |          |    polling...                  |                |
      |          |>---(E)-- Verification Code --->|                |
      |          |                                |  Authorization |
      |          |<---(F)-- Access Token --------<|     Server     |
      +----------+  (w/ Optional Refresh Token)   |                |
            v                                     |                |
            :                                     |                |
           (C) User Code & Verification URI       |                |
            :                                     |                |
            v                                     |                |
      +----------+                                |                |
      | End-user |                                |                |
      |    at    |<---(D)-- User authenticates -->|                |
      |  Browser |                                |                |
      +----------+                                +----------------+

*参考 [#w02cc0d7]
-OAuth - Wikipedia~
https://ja.wikipedia.org/wiki/OAuth

**OAuth 1.0 [#p21aa8ec]

-OAuth Core 1.0~
http://oauth.net/core/1.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

**OAuth 2.0 [#kf0c5742]
-[[The OAuth 2.0 Authorization Framework>#v698197b]]

-OAuth 2.0 の仕組みと認証方法 | murashun.jp~
https://murashun.jp/blog/20150920-01.html

-OAuth 2.0の代表的な利用パターンを仕様から理解しよう - Build Insider~
http://www.buildinsider.net/enterprise/openid/oauth20

***@IT [#td234676]
-デジタル・アイデンティティ技術最新動向 連載インデックス~
http://www.atmarkit.co.jp/fsecurity/index/index_digid.html
--デジタル・アイデンティティ技術最新動向(1):「OAuth」の基本動作を知る
---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サービスの利用方法はどう変わるか
--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 [#l7c63c6d]
-OAuth & OpenID Connect 関連仕様まとめ - Qiita~
https://qiita.com/TakahikoKawasaki/items/185d34814eb9f7ac7ef3

-OAuth 2.0 の仕様を読むために - Qiita~
http://qiita.com/awakia/items/66975de18ba25f18a961
-色々な OAuth のフローと doorkeeper gem での実装 - Qiita~
http://qiita.com/tyamagu2/items/5aafff7f6ae0a9ec94aa

***slideshare [#n243ede8]
-今更聞けない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

**[[Microsoft Azure Active Directory]] [#h250e475]

----
Tags: [[:認証基盤]], [[:クレームベース認証]], [[:OAuth]]
Tags: [[:IT国際標準]], [[:認証基盤]], [[:クレームベース認証]], [[:OAuth]]


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS