MS_OAuthMTLS - NetDevInfraWGinOSSConsortium/NetDevInfraWiki GitHub Wiki

OAuth 2.0 Mutual TLS Client Authentication and Certificate Bound Access Tokens

抂芁

蚘名匏切笊䜜成に関するセキュリティ拡匵仕様RFC 8705 ずしお暙準化

  • Mutual TLS(MTLS)OAuth 2.0 Mutual TLS Client Authentication and Certificate Bound Access Tokens

  • OAuth2.0 Proof of Possessionが前提ずしたRFC 8705の掟生ず蚀える。
    TLS 䟝存でむンフラ構築が必芁。

  • Mutual TLS ずいうず、単に「TLS 通信時にクラむアント偎も蚌明曞を提瀺する」
    こずを意味する。

  • FAPI の文脈では、蚘名匏切笊の䜜成ず䜿甚。

    • クラむアント蚌明曞による OAuth クラむアント認蚌

    • クラむアント蚌明曞に玐付くトヌクンに関する凊理

    • 別称「Certificate Binding」で、以䞋を遞択的に䜿甚できる。

※ このペヌゞは、ドラフト 12 を参考にしお䜜成。

移行メモ誀字: 「キュリティ拡匵仕様」→「セキュリティ拡匵仕様」を修正した。

補足2 ぀の機胜が 1 ぀の仕様に入っおいる: 名称が長いのは、
この仕様が独立しお䜿える 2 ぀の機胜を含むためである。

  1. Mutual TLS Client Authentication
    
 クラむアント蚌明曞を client_secret の代わりに䜿うクラむアント認蚌
  2. Certificate Bound Access Tokens
    
 発行するアクセス トヌクンをその蚌明曞に玐づける送信者制玄

埌述の「実装に関する ---> Access Token」にあるずおり、
この 2 ぀は互いに独立しお䜿甚できる。

方法

X.509 蚌明曞のクラむアント蚌明曞を䜿甚する。

  • TLS ハンドシェむクにより秘密鍵の所有を怜蚌する。
  • クラむアント蚌明曞の入れ替えは自由に行うこずが出来る。
  • 以䞋のケヌスで凊理方匏が異なっおくる。

公開鍵基盀PKI

  • TLS 通信で甚いられた公開鍵基盀PKIのクラむアント蚌明曞を甚いる方匏

    • 蚌明曞チェヌンず、
    • 事前登録したサブゞェクト識別名DNを䜿甚する。
      その堎合のメタデヌタは、tls_client_auth_subject_dn
  • メタデヌタ倀: tls_client_auth

自己眲名蚌明曞

補足どちらを遞ぶか: PKI 方匏は
CA が蚌明曞を再発行しおも登録内容を倉えずに枈むDN で照合するためが、
信頌する CA の管理が必芁になる。
自己眲名方匏は CA が䞍芁で、鍵のロヌテヌションを
jwks_uri の曎新だけで行える。
FAPI では䞡方が認められおいる。

シヌケンス

バむンディング

  • Token Endpoint で Mutual TLS クラむアント認蚌する。
  • X.509 蚌明曞の Hash により Client ず Access Token を結び付ける。

ベリファむ

  • Resource EndPoint で Mutual TLS クラむアント認蚌する。
  • Resource Server は、X.509 蚌明曞の Hash ず、
    Access Token の結び付けを怜蚌する。

方匏のメリット・デメリット

メリット

  • Client 自䜓は殆ど䜕も倉えなくお良い。
  • 察応しなければならないのは Server 偎。

デメリット

  • Client 偎からは、Server がそのトヌクンを

    解らない。

  • Client 自身のリスク管理には、その情報が必芁なので、
    同じリ゜ヌス URI は、「持参人切笊」を取り扱っおはならない。

  • 異なる Authorization Scheme ではなく、
    Bearer スキヌマをそのたた䜿うのは、
    英囜の Open Banking での採甚のし易さに配慮した結果。

移行メモ助詞: 「同じリ゜ヌス URI は、「持参人切笊」は取り扱っおはならない。」の
助詞の重耇を「を取り扱っおはならない」に敎えた。

察象のEndPoint

Authorization Server の゚ンドポむント

Authorization Server の䞋蚘の゚ンドポむントにクラむアント認蚌の远加メカニズムを提䟛。

Resource Server の゚ンドポむント

任意の゚ンドポむント

詳现

クラむアント蚌明曞によるクラむアント認蚌

  • client_id パラメタが必須
    クラむアント蚌明曞の内容ずは独立しお Client を識別するため。

  • クラむアント蚌明曞を Client Credentials ずしお䜿甚しお、
    client_id をバむンドする 2 ぀の異なった方法がある。

  • なお、Client の登録方法に䟝存しない。

    • 動的に登録
    • 静的に構成
    • 別の方法で確立

tls_client_auth

tls_client_auth_subject_dn

  • クラむアント蚌明曞の予想されるサブゞェクト識別名の文字列衚珟。

self_signed_tls_client_auth

メタデヌタの芏定は無し

  • jwks_uri の Jwk Setから、
    x5c パラメタの最初の蚌明曞の公開鍵
    RSA = "n" and "e", EC = "x" and "y"を取埗。

送信者制限付きAccess Token

  • 送信者制限には、x5t#S256SHA-256 による蚌明曞フィンガヌプリントを䜿甚する。
  • x5t#S256 は以䞋の様に芏定されるので通垞、thumbprint の文字列をそのたた扱えばむむ。
base64url-encoded [RFC4648] SHA-256 [SHS] hash
(a.k.a. thumbprint, fingerprint or digest)
of the DER encoding of the X.509 certificate [RFC5280].

送信者制限のバむンディング

Client が Token ゚ンドポむントぞの接続でクラむアント蚌明曞を䜿甚するず、
Authorization Server は発行された Access Token をクラむアント蚌明曞に
バむンドできる。

  • Access Token に蚌明曞ハッシュを埋め蟌む
    • JWT に、cnf > x5t#S256 メンバずしお埋め蟌む。
    • 以䞋は、x5t#S256 を含む JWT ペむロヌドの䟋。
{
  "iss": "https://server.example.com",
  "sub": "[email protected]",
  "exp": 1493726400,
  "nbf": 1493722800,
  "cnf":{
    "x5t#S256": "bwcK0esc3ACC3DB2Y5_lESsXE8o9ltc05O89jdN-dg2"
  }
}
HTTP/1.1 200 OK
Content-Type: application/json

{
  "active": true,
  "iss": "https://server.example.com",
  "sub": "[email protected]",
  "exp": 1493726400,
  "nbf": 1493722800,
  "cnf":{
    "x5t#S256": "bwcK0esc3ACC3DB2Y5_lESsXE8o9ltc05O89jdN-dg2"
  }
}

補足cnf クレヌム: cnfconfirmationは RFC 7800 で定矩された
「このトヌクンを䜿うには、ここに曞かれた鍵の所有を蚌明せよ」ずいう
汎甚のクレヌムである。
mTLS は cnf の䞭に蚌明曞のフィンガヌプリントx5t#S256を入れ、
DPoP は公開鍵のサムプリントjktを入れる。
蚘名匏切笊の「蚘名欄」にあたる。

送信者制限のベリファむ

Client は、Resource リク゚ストに、Token リク゚ストで䜿甚したクラむアント認蚌を
䜿甚する必芁がある。
蚌明曞が䞀臎しない堎合は、HTTP 401 ず "invalid_token" で拒吊が必須。

メタデヌタ

Discovery のメタデヌタ

OpenID Connect - Discovery

  • mutual_tls_sender_constrained_access_tokens
    • 本仕様のサポヌトを瀺す bool 倀。
    • オプション。default 倀は "false"。

Dynamic Client Registration のメタデヌタ

OpenID Connect - Dynamic Client Registration

  • mutual_tls_sender_constrained_access_tokens
    • 本仕様を䜿甚する意図を瀺す bool 倀。
    • オプション。default 倀は "false"。

移行メモRFC でのパラメタ名: 本ペヌゞはドラフト 12 を基にしおいるため
mutual_tls_sender_constrained_access_tokens ずなっおいるが、
RFC 8705 では tls_client_certificate_bound_access_tokens に改称された
Discovery / Registration の双方。

考慮事項

実装に関する考慮事項

Server の実装

  • Authorization Server

    • 他のクラむアント認蚌をサポヌトする堎合、
      (MTLS) クラむアント認蚌をオプションにする。

    • 自己眲名蚌明曞を䜿甚する堎合、
      蚌明曞チェヌンを怜蚌しないように TLS スタックを構成する必芁がある。

    • クラむアント認蚌を必芁ずしない他の゚ンドポむントを、
      他のホスト名でホストするこずを考慮しおもよい。

  • Resource Server
    Resource Server は、クラむアントの蚌明曞のチェヌンを怜蚌する必芁はないので、
    蚌明曞チェヌンを怜蚌しないように TLS スタックを構成する必芁がある。

Access Token の実装

クラむアント認蚌ず "送信者制限付き Access Token" は、
互いに独立しお䜿甚できる。

  • クラむアント認蚌ありの "送信者制限付き Access Token"

    • これに぀いおは説明枈み。
    • クラむアント蚌明曞を曎新するず、
      "送信者制限付き Access Token" は無効になる。
    • 無効化された堎合は、期限切れのアクセストヌクンず同様に凊理できる。
  • クラむアント認蚌なしの "送信者制限付き Access Token"

    • クラむアント認蚌なしで、
      "送信者制限付き Access Token" のみ䜿甚できる。
    • Token リク゚ストで、蚌明曞チェヌンを怜蚌しないように
      TLS スタックを構成する必芁がある。
    • Resource リク゚ストで、クラむアント認蚌曞ず Access Token から取埗した
      蚌明曞フィンガヌプリントを比范する。

※ 互いに独立しお䜿甚できるずいうコトは、

  • tls_client_auth
  • self_signed_tls_client_auth

をクラむアント認蚌のみで䜿甚するこずもできる

補足䞊蚘の疑問ぞの答え: そのずおりで、
クラむアント認蚌だけに䜿うこずができる。
RFC 8705 では、クラむアント認蚌第 2 章ず
蚌明曞バむンド アクセス トヌクン第 3 章が
明確に別の章立おになっおおり、
Discovery / Registration のメタデヌタも別々に甚意されおいる
前者は token_endpoint_auth_method、
埌者は tls_client_certificate_bound_access_tokens。

Implicit Flowはサポヌトされない。

  • Token ゚ンドポむントぞリク゚ストしない Implicit Flow はサポヌトできない。
  • 逆に、Hybrid Flow のサポヌトも必芁だが、Token ゚ンドポむントで凊理しさえすればよい。

セキュリティに関する考慮事項

TLS

  • バヌゞョン

    • 䞻流なので、TLS 1.2 [RFC5246] を匕甚。
    • 最近発衚された、TLS 1.3 [RFC8446] を掚奚。
  • 考慮事項
    BCP 195, RFC 7525: Recommendations for Secure Use of TLS and DTLS

  • ネットワヌク仲介者

    • ロヌドバランサ、リバヌスプロキシなどで、TLS が䞭断されおも良い。
    • この堎合、クラむアント蚌明曞メタデヌタを受け枡す方法は仕様の範囲倖。

補足TLS 終端が最倧の実装課題: 「TLS が䞭断されおも良い」ずあるが、
その堎合ロヌドバランサが受け取ったクラむアント蚌明曞を
アプリケヌションたで運ぶ
必芁があるX-SSL-Client-Cert 等のヘッダ。
仕様倖なので補品ごずに䜜法が異なり、
か぀倖郚から同じヘッダを停装されないよう必ず䞊曞きする必芁がある。
mTLS の導入で「むンフラ構築が必芁」ず蚀われる実䜓は、ここにある。

X.509蚌明曞ず蚌明曞チェヌンの解析ず怜蚌

  • X.509 蚌明曞ず蚌明曞チェヌンの解析ず怜蚌は耇雑

  • 実装ミスによっお以前にセキュリティの脆匱性が露呈しおいた。

  • 十分にテストされた X.509 ラむブラリを䜿甚するべきで、
    独自の X.509 蚌明曞怜蚌手順を曞かないこず。

蚌明曞スプヌフィング

  • 同じサブゞェクト識別名DNを持぀蚌明曞を䜿甚しお
    クラむアントを停装しようずする可胜性がある。
  • 埓っお、蚌明曞発行ポリシヌがセキュリティ芁件を満たしおいる
    限られた数の CA だけを信頌アンカヌずしお受け入れるべき。

OAuth 2.0 Token Bindingずの関連

OAuth 2.0 Token Binding

類䌌点

OAuth 2.0 Token Binding の

「Token を、Client 䞊の非察称キヌ・ペアにバむンドする」凊理方匏は、

"送信者制限付き Access Token" に察する

  • デザむン
  • モチベヌション

に察しお、幟぀かの類䌌点がある。

デザむンの類䌌点

  • 蚘名匏切笊のための
    玐付けトヌクン・バむンディングに関しお、
    OAuth 2.0 Token Binding ず競合する仕様。

  • Authorization Server が発行した Access Token を、
    Client 䞊の非察称キヌ・ペアにバむンドする。

    • Client 䞊で生成される非察称キヌ・ペアを䜿甚し、
    • 秘密鍵保持の蚌明Proof of Possession、POPを行う。

モチベヌションの類䌌点

芏制芁件によっお動機付けられた OAuth 察応の金融取匕で、

  • 蚌明曞の䜜成、配垃、および管理の難しさの倚くを回避し、
  • より広範な導入ず展開を芋蟌む可胜性がある。

盞違点

OAuth 2.0 Token Binding の状況

ただ、新しく、珟圚の開発プラットフォヌムずツヌルでは、比范的少数のサポヌトしかない。

OAuth 2.0 Mutual TLS の状況

  • しばらく前からあり、珟圚の開発プラットフォヌムずツヌルで広くサポヌトされおいる。
  • こちらは、OAuth 2.0 Token Binding より、迅速な゜リュヌション提䟛を目指しおいる。

補足決着: この比范の結論は、
mTLS が RFC 8705 ずしお暙準化され、Token Binding は
ブラりザ実装が芋送られお事実䞊廃止
、ずいう圢で出た。
「蚌明曞の䜜成・配垃・管理の難しさを回避したい」ずいう
Token Binding のモチベヌションのほうは、その埌
**アプリケヌション局で鍵を持぀ DPoPRFC 9449**が
匕き受けおいる。
FAPI 2.0 でも、送信者制玄の手段ずしお
mTLS たたは DPoP が指定されおいる。

参考

本 Wiki 内


Tags: IT囜際暙準, 認蚌基盀, クレヌムベヌス認蚌, OAuth

⚠ **GitHub.com Fallback** ⚠