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

-[[戻る>OAuth#jec853e3]]
-[[戻る>OAuth 2.0 セキュリティ関連トピック]]

* 目次 [#v8b8e49a]
#contents

*概要 [#d531ad5d]
UserAgentでOAuth2のTokenを取得するベスト・プラクティス~
UserAgent([[SPA>#q18ff74d]]や[[スマホ>#m0aacf50]])でOAuth2のTokenを取得するベスト・プラクティス~
(UserAgentから、直接、Resource ServerのWebAPIにアクセスする)

*詳細 [#l33d0f36]

**SPA [#q18ff74d]
***Implicitが使用できる。 [#g8b68319]
-[[Implicitグラント種別>OAuth#m5c2d510]]
-[[Implicit Flow>OpenID Connect#e7adf5c2]]
SPA : [[Single-page application]]

***Implicitが使用できる...が非推奨。 [#g8b68319]
-[[Implicitグラント種別>OAuth#m5c2d510]]、[[Implicit Flow>OpenID Connect#e7adf5c2]]が、非推奨になってきたらしい。

--[[CORS>クロス ドメイン接続#t317812a]]で、TokenエンドポイントにRequest可能になってきたので、

--[[OAuth PKCE]]を使用して、Public Client でも [[sender constrainedなcode>Token Binding]]を発行。
--[[Fragment(response_mode=fragment) >OAuth 2.0 Form Post Response Mode]]で、codeをフラグメントに乗せる。

>と言う方法が、[[SPA>Single-page application]]における認証・認可の推奨になりつつある。

--これにより「Private-Use URL Scheme上書き攻撃」などから保護される。

--入手したcodeはClientのServer側にポストしてアクセストークン・リクエストする。~
※ Publicクライアントにclient_id、client_secretを持たせてはダメなので。

-詳しくは、
>[[OAuth 2.0 for Browser-Based AppsのPKCE>OAuth 2.0 for Browser-Based Apps#c4bc526c]]

>を参照のこと。

-参考
--OAuth 2.0 の Implicit grant 終了のお知らせ - r-weblife~
https://ritou.hatenablog.com/entry/2018/11/12/110613
---Why you should stop using the OAuth implicit grant!~
https://medium.com/oauth-2/why-you-should-stop-using-the-oauth-implicit-grant-2436ced1c926
---[[OAuth 2.0 Security Best Current Practice>#fefe0317]]
---[[OAuth 2.0 for Browser-Based Apps>#qc6a5a70]]

***[[Hybrid Flow>OpenID Connect#l565139a]]でセキュリティが強化。 [#ya921110]

-codeやtokenのscope(認可された権限)を変える。~
※ [[Financial API (FAPI)>#q58a3e42]]では、token:参照系、code:更新系などとなっている。

-入手したcodeはClientのServer側にポストして使用する。~
※ Publicクライアントにclient_id、client_secretを持たせてはダメなので。

-問題は、マイナーで、プロファイルがあまり明確ではないこと。

***[[Financial API (FAPI)>#q58a3e42]]も策定中。 [#x3cf1768]
[[Token Binding]]の雲行きが怪しくなっているので、~
PKCE+Fragment みたいな方式はアリかもしれない。

***[[OAuth2.0 DPoP]](ドラフト) [#gbb640b2]
-SPAをターゲットとして仕様が作成されている。
-名前の通り、アプリケーション・レイヤで、[[記名式切符>トークン#b38de47f]]を発行することができる。
-これにより、SPAから直接Tokenエンドポイントにリクエストすることができる。

***[[PKCE 4 SPA>Authorization Code Grant Flow with PKCE]]でFA(現時点で) [#l92eacc2]
[[Authorization Code Grant Flow with PKCE]]がSPAでの[[Implicit代替>#g8b68319]]としてデファクト化。

***[[Token保存先の問題>JWTのコンテキストで何故かSessionとかCookieとか#iac9439e]] [#ub3676fe]

**スマホ [#m0aacf50]

***前提条件 [#u115b44f]
-(セキュリティ的懸念から)認可リクエストを、外部Webブラウザを経由してのみ行う。~
[[プラットフォームによっては、外部Webブラウザ相当のUXを向上させる仕組みが用意されている>OAuth 2.0 for Native Apps#m215f35d]]。

-codeとtokenが、「Private-Use URL Scheme上書き攻撃」などから保護されない可能性がある。

***Implicitは使用できない。 [#ubdf2972]

-[[Implicitグラント種別>OAuth#m5c2d510]]

-[[Implicit Flow>OpenID Connect#e7adf5c2]]

***以下のどちらかを使用する。 [#jefeac9f]
-使用可能なフロー
--[[OAuth PKCE]]
--[[Hybrid Flow>OpenID Connect#l565139a]]
***[[Hybrid Flow>OpenID Connect#l565139a]]も使用できない。 [#ya921110]

-ポイント
--入手したcodeはClientのServer側にポストして使用
--[[Hybrid Flow>OpenID Connect#l565139a]]では、
---codeとtokenのscope(認可された権限)を変える。
---FAPIでは、token:参照系、code:更新系などとなっている。
***[[OAuth PKCE]]を適切に利用する。 [#x48308e1]

***[[Financial API (FAPI)>#q58a3e42]]も策定中。 [#q58a3e42]
***[[Financial API (FAPI)>#q58a3e42]]も策定中。 [#m9f94dc3]

**[[Financial API (FAPI)]] [#q58a3e42]
-金融向け規格なので、前述よりさらにセキュリティ・レベルが強化される。
-現時点では、まだドラフト段階だが、スマホ、SPA、共に、この規格の導入を検討してイイ。

*参考 [#t3d9eecd]
-OAuth for Native Apps | GREE Engineers' Blog~
http://labs.gree.jp/blog/2015/12/14831/

-知っておきたい7つのID連携実装パターン - Yahoo! JAPAN Tech Blog~
https://techblog.yahoo.co.jp/web/auth/id_federation_impl_patterns/
>
+スタンダードなブラウザーパターン
+推奨したいネイティブアプリとブラウザーパターン
+画面遷移がシンプルなネイティブアプリとWebViewパターン
+フィッシング防止なWebViewアプリとブラウザーパターン
+WebViewアプリ完結パターン
+実装が大変だけどより汎用的なハイブリッドアプリとブラウザーパターン
+汎用的なハイブリッドアプリとWebViewパターン
**ベストプラクティス [#qd8e4d14]

-OAuth2/OIDCの認証にWebViewはダメっぽい。
***[[AppAuth]] [#wcc4686c]
***[[OAuth 2.0 for Native Apps]] [#ze7530a4]
***[[OAuth 2.0 for Browser-Based Apps]] [#of822fba]

--OAuthなプラットフォームの中の人が椅子を投げたくなるアプリの実装 - r-weblife~
http://d.hatena.ne.jp/ritou/20120619/1340101421
--Google、WebViewからのOAuth認証リクエストをブロックへ | スラド セキュリティ~
https://security.srad.jp/story/16/08/30/0636245/
---WebViewでGoogleアカウントのOAuth認証が使えなくなる問題~
https://techracho.bpsinc.jp/hachi8833/2016_09_01/25471
---AndroidからGoogle Service OAuth2.0の利用で詰んでいる~
http://awwa500.blogspot.jp/2012/12/androidgoogle-service-oauth20.html
**[[Financial API (FAPI)]] [#q58a3e42]
***[[FAPI Part 1>FAPI Part 1 (Read Only API Security Profile)#k5a50e89]] [#z00a2dcb]
≒[[S256のPKCE>OAuth PKCE#k363fd25]]

--代替の提案としては、以下のモノがある。~
---Chrome Custom Tabs(Android向け)~
https://developer.chrome.com/multidevice/android/customtabs
---SFSafariViewController(iOS向け)~
https://developer.apple.com/library/ios/documentation/SafariServices/Reference/SFSafariViewController_Ref/
***[[FAPI Part 2>FAPI Part 2 (Read and Write API Security Profile)#y974f9a7]] [#sf28cb1a]

**仕様 [#yba7af6f]
**OSSコンソーシアム [#a0dd64d2]
-UserAgentでOAuth2のTokenを取得するベスト・プラクティス~
https://www.osscons.jp/joavafb1i-537/#_537

***[[スマホ向けベストプラクティス (RFC 8252 ... OAuth 2.0 for Native Apps)>OAuth 2.0 for Native Apps]] [#q93a1734]
-Single Sign-On user experience with OAuth PKCE by Open棟梁 and Cordova.~
https://www.osscons.jp/jobgbko8n-537/#_537

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

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


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