マイクロソフト系技術情報 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。

目次

概要

  • ブラウザベースのアプリケーション(≒ SPA)を
    開発するときのOAuth2, OIDCの考慮事項とベストプラクティス
  • Native App同様、
    • Public Clientなので、client_secretを使用することはできない。
    • OAuth2, OIDCを実装する際の類似点が取り上げられている。

詳細

アーキテクチャ

APIと同一ドメイン

エンプラSPA的なアプリケーションはSessionを認証として使用してイイ

  • Session認証には、可動部分が少なく、攻撃ベクトルが少ないという利点がある。
  • フェデレーション・アクセスが無いため、OAuth2, OIDCが最適なソリューションではない。

バックエンド・コンポーネント

  • バックエンドコン・ポーネントは本質的に、ブラウザ内で実行されているコードの新しい認証サーバ
    • 独自のtoken(たとえばSessionCookie?)を発行する可能性。
  • Tokenリクエストをバックエンド・コンポーネントから実行することを希望する可能性がある。
    • Code → Access Token
    • Refresh Token → Access Token
  • 独自のClient Secretが発行されたConfidential Client
    • HTTPSのRedirect URIの完全一致をClient認証として自動再認証を許可できる。
      (ワイルドカード・ドメイン/パス、クエリ文字列を含まない)
    • ただし、Authentication Serverは、デプロイメント全体から
      バックエンドコン・ポーネントもPublic Clientと看做すことがある。

Flow

Authorization Code

  • stateを使用
  • Redirect URI
    • 完全一致を推奨
    • 柔軟性を提供する場合、ホスト名と一致
  • OAuth 2.0 authorization code flow with the PKCE extensionでは、
    フロントチャンネルにアクセストークンを返さないようにする。

※ OAuth 2.0 で行うHTTP通信

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

Implicit Flow

  • 脅威
    • リダイレクトURIの傍受
    • ブラウザ履歴からのトークン漏洩
    • スクリプト
      •  悪意のあるスクリプト注入による操作
      • サードパーティ・スクリプトによる漏洩
  • 欠点
    • Access Tokenの検証メカニズムが無い
    • Redirectが失敗したり傍受されたりする可能性がある
    • 関連するセキュリティ上の考慮事項、追加のコードが多い。
  • 基本的に
    • PKCEが推奨
    • 特に側(皮)ネイティブの場合は、PKCE

Refresh Token

Authentication Serverは、SPAに(フロントチャネルで)Refresh Tokenを

  • 発行すべきではない。
  • 発行する場合、1回限りの使用とする。
  • 長期保存する場合、静的JavaScriptに制限するなど。

OAuth PKCE

結論

OAuth 2.0 for Native Appsとだいたい同じ

使用するフロー

Implicitは脅威・欠点が多い

バックチャネルで発行するならAuthorization Code

SPAにtokenを渡せないが、Implicitと比べ脅威・欠点が少ない。

フロントチャネルで発行するならOAuth PKCE

SPAにtokenを渡す場合、OAuth PKCEを使う。

Client認証

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

参考

仕様

OAuth PKCE

OAuth 2.0 for Native Apps

AppAuth

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


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


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2019-07-18 (木) 17:40:43 (31d)