-
Notifications
You must be signed in to change notification settings - Fork 0
MS_OAuthForBrowserBasedApps
- 戻る(UserAgentでOAuth2のTokenを取得するベスト・プラクティス)
- AppAuth
- OAuth 2.0 for Native Apps
- OAuth 2.0 for Browser-Based Apps
-
ブラウザベースのアプリケーション(≒ SPA)を
開発するときの OAuth 2, OIDC の考慮事項とベストプラクティス -
Native App 同様、
エンプラ SPA 的なアプリケーションは Session を認証として使用してイイ
-
バックエンド・コンポーネントは本質的に、ブラウザ内で実行されているコードの新しい認証サーバ
- 独自の token(たとえば SessionCookie)を発行する可能性。
-
Token リクエストをバックエンド・コンポーネントから実行することを希望する可能性がある。
- Code → Access Token
- Refresh Token → Access Token
-
独自の Client Secret が発行された Confidential Client
- HTTPS の Redirect URI の完全一致を Client 認証として自動再認証を許可できる。
(ワイルドカード・ドメイン/パス、クエリ文字列を含まない) - ただし、Authentication Server は、デプロイメント全体から
バックエンド・コンポーネントも Public Client と看做すことがある。
- HTTPS の Redirect URI の完全一致を Client 認証として自動再認証を許可できる。
移行メモ(表記): 元ページの「バックエンドコン・ポーネント」(3 箇所)は
中黒の位置が誤っているため「バックエンド・コンポーネント」に統一した。
補足(BFF パターン): ここでいう「バックエンド・コンポーネント」は、
現在 BFF(Backend For Frontend)と呼ばれる構成である。
トークンをブラウザに渡さずサーバ側に置き、
ブラウザとは HttpOnly な Cookie でやり取りするため、
XSS でトークンを盗まれる経路がなくなる。
後継の草案(oauth-browser-based-apps)では、
この BFF 方式が推奨される第一の選択肢として整理されている。
-
stateを使用 - Redirect URI
- 完全一致を推奨
- 柔軟性を提供する場合、ホスト名と一致
※ OAuth 2.0 で行う HTTP 通信
- フロントチャネル(ユーザーのブラウザを介した通信)
- バックチャネル(ユーザーが介在しない、サーバーサイド同士の通信)
-
脅威
- リダイレクト URI の傍受
- ブラウザ履歴からのトークン漏洩
- スクリプト
- 悪意のあるスクリプト注入による操作
- サードパーティ・スクリプトによる漏洩
-
欠点
- Access Token の検証メカニズムが無い
- Redirect が失敗したり傍受されたりする可能性がある
- 関連するセキュリティ上の考慮事項、追加のコードが多い。
-
基本的に
補足(Implicit は廃止された): 本ページが「非推奨の流れ」と
述べていた Implicit Flow は、その後 OAuth 2.0 Security BCP と
OAuth 2.1 で正式に廃止された。
現在はブラウザ アプリでも
Authorization Code + PKCE が唯一の選択肢である。
「側(皮)ネイティブ」は、
WebView でラップしただけのハイブリッド アプリを指す著者の言い回し。
Authentication Server は、SPA に(フロントチャネルで)Refresh Token を
- 発行すべきではない。
- 発行する場合、1 回限りの使用とする。
- 長期保存する場合、静的 JavaScript に制限するなど。
補足(Refresh Token Rotation): 「1 回限りの使用とする」は、
現在 Refresh Token Rotation として定着した方式である。
使うたびに新しい Refresh Token を発行して古いものを無効化し、
同じ Refresh Token が 2 回使われたら盗難とみなして
その系列をすべて失効させる。
OAuth 2.0 for Native Apps とだいたい同じ
UserAgentでOAuth2のTokenを取得するベスト・プラクティスの
「詳細 → Implicit フロー非推奨」を参照。
SPA に token を渡せないが、Implicit と比べ脅威・欠点が少ない。
SPA に token を渡す場合、OAuth PKCE を使う。
ただし、バックエンド・コンポーネントが Confidential Client とみなせるので、
一部扱いを変えることが出来る(ClientId + RedirectUrl で Client 認証可能)。
-
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
当該ベストプラクティスの採用を助ける OpenID Foundation が後援する一連のライブラリ。
Tags: IT国際標準, 認証基盤, クレームベース認証, OAuth
このWikiは「Open棟梁Project」,「OSSコンソーシアム 開発基盤部会」によって運営されています。