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

-[[戻る>UserAgentでOAuth2のTokenを取得するベスト・プラクティス]]
--[[AppAuth]]
--[[OAuth 2.0 for Native Apps]]
--OAuth 2.0 for Browser-Based Apps

* 目次 [#pa22b9dc]
#contents

*概要 [#k77a528c]
-ブラウザベースのアプリケーション(≒ [[SPA>SPAとMPA#q8640287]])を~
開発するときの[[OAuth]]2, [[OIDC>OpenID Connect]]の考慮事項とベストプラクティス

-[[Native App>OAuth 2.0 for Native Apps]]同様、
--Public Clientなので、client_secretを使用することはできない。
--[[OAuth]]2, [[OIDC>OpenID Connect]]を実装する際の類似点が取り上げられている。

*詳細 [#bb1e75ec]

**アーキテクチャ [#ge97172e]

***APIと同一ドメイン [#jafe0e54]
エンプラ[[SPA>SPAとMPA#q8640287]]的なアプリケーションはSessionを認証として使用してイイ
-Session認証には、可動部分が少なく、攻撃ベクトルが少ないという利点がある。

-フェデレーション・アクセスが無いため、[[OAuth]]2, [[OIDC>OpenID Connect]]が最適なソリューションではない。

***バックエンド・コンポーネント [#dcd8c1b5]
-バックエンドコン・ポーネントは本質的に、ブラウザ内で実行されているコードの新しい認証サーバ
--独自のtoken(たとえばSessionCookie)を発行する可能性。

-Tokenリクエストをバックエンド・コンポーネントから実行することを希望する可能性がある。
--Code → Access Token
--Refresh Token → Access Token

-独自のClient Secretが発行されたConfidential Client
--HTTPSのRedirect URIの完全一致をClient認証として自動再認証を許可できる。~
(ワイルドカード・ドメイン/パス、クエリ文字列を含まない)
--ただし、Authentication Serverは、デプロイメント全体から~
バックエンドコン・ポーネントもPublic Clientと看做すことがある。

**Flow [#p9606379]

***Authorization Code [#x2bc34ee]
-stateを使用
-Redirect URI
--完全一致を推奨
--柔軟性を提供する場合、ホスト名と一致

※ OAuth 2.0 で行うHTTP通信
--フロントチャネル(ユーザーのブラウザを介した通信)
--バックチャネル(ユーザーが介在しない、サーバーサイド同士の通信)

***Implicit Flow [#oa547cf4]

-脅威
--リダイレクトURIの傍受
--ブラウザ履歴からのトークン漏洩
--スクリプト
--- 悪意のあるスクリプト注入による操作
---サードパーティ・スクリプトによる漏洩

-欠点
--Access Tokenの検証メカニズムが無い
--Redirectが失敗したり傍受されたりする可能性がある
--関連するセキュリティ上の考慮事項、追加のコードが多い。

-基本的に
--[[PKCE>#c4bc526c]]が推奨
--特に側(皮)ネイティブの場合は、[[PKCE>#c4bc526c]]

***Refresh Token [#udfd76ec]
Authentication Serverは、[[SPA>SPAとMPA#q8640287]]に(フロントチャネルで)Refresh Tokenを
-発行すべきではない。
-発行する場合、1回限りの使用とする。
-長期保存する場合、静的JavaScriptに制限するなど。

***[[OAuth PKCE>OAuth PKCE#k3b1f3c9]] [#c4bc526c]
[[SPA向けのOAuth PKCE>OAuth PKCE#k3b1f3c9]]

*結論 [#fcac960e]
[[OAuth 2.0 for Native Apps>OAuth 2.0 for Native Apps#sd27cd31]]とだいたい同じ 

**使用するフロー [#r7253af8]

***Implicitは脅威・欠点が多いので非推奨の流れ。 [#baa5e6d8]
[[UserAgentでOAuth2のTokenを取得するベスト・プラクティス → 詳細 → Implicitフロー非推奨>UserAgentでOAuth2のTokenを取得するベスト・プラクティス#c545761d]]

***バックチャネルで発行するならAuthorization Code [#a5a78018]
SPAにtokenを渡せないが、Implicitと比べ脅威・欠点が少ない。

***フロントチャネルで発行するなら[[OAuth PKCE]] [#r2146209]
SPAにtokenを渡す場合、[[OAuth PKCE]]を使う。

**Client認証 [#k2e780c6]
ただし、バックエンド・コンポーネントがConfidential Clientとみなせるので、~
一部扱いを変えることが出来る(ClientId+RedirectUrlでClient認証可能)。

*参考 [#wef0bf7a]

**仕様 [#k0a4be73]
-draft-parecki-oauth-browser-based-apps-01 - OAuth 2.0 for Browser-Based Apps~
https://tools.ietf.org/html/draft-parecki-oauth-browser-based-apps

-超雑訳 OAuth2.0 for Browser-Based Apps - Qiita~
https://qiita.com/NewGyu/items/77c332a81f43c839c64c

***[[OAuth PKCE]] [#wd3956e1]

***[[OAuth 2.0 for Native Apps]] [#k576ac0e]

**[[AppAuth]] [#af5eb035]
当該ベストプラクティスの採用を助けるOpenID Foundationが後援する一連のライブラリ。

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

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS