- RFC 8705 OAuth 2.0 Mutual-TLS Client Authentication and Certificate-Bound Access Tokens の個人メモ
Mutual TLS for OAuth Client Authentication
クライアント認証方式として、次の2つを定義する。
PKI Mutual TLS Method(tls_client_auth
)
- クライアント・認可サーバー間のTLS通信で用いられたクライアント証明書をクライアント認証に用いる。
-
認可サーバー : クライアント証明書の有効性確認としてSubject Distinguished NameもしくはSubject Alternative Nameのエントリーのどちらかが事前に登録されている値と一致するかを確認する。
- クライアント : クライアント証明書のSubject Distinguished NameもしくはSubject Alternative Nameを事前にサーバーに登録する。
Self-Signed Certificate Mutual TLS Method(self_signed_tls_client_auth
)
- 自己署名証明書をクライアント証明書として用いる。
- クライアントは、自己署名証明書・公開鍵を事前に認可サーバーに登録する。
Mutual-TLS Client Certificate-Bound Access Tokens
- 認可サーバー側でアクセストークンをクライアント証明書と紐づけ、API認証をより強固に行う方法
-
処理の流れ
-
認可サーバー/トークンエンドポイント : アクセストークン発行時、TLS 通信で提示されたクライアント証明書のハッシュ値を計算し、そのハッシュ値をアクセストークンと紐付けて保存する。
- アクセストークンがJWT形式の場合は、ハッシュを埋め込む。
- クライアント : 取得したアクセストークンを使いリソースサーバーの API にアクセスする。その際、トークンエンドポイントリクエスト時に使用したものと同じクライアント証明書を用いる。
- リソースサーバー : リクエストからアクセストークンとクライアント証明書を取得し、クライアント証明書のハッシュ値を計算して、その値がアクセストークンと紐付くハッシュ値と同じか確認する。
-
認可サーバー/トークンエンドポイント : アクセストークン発行時、TLS 通信で提示されたクライアント証明書のハッシュ値を計算し、そのハッシュ値をアクセストークンと紐付けて保存する。