仕組み
-
トランスポート層での相互 TLS (mTLS) 証明書バインディング:
- メカニズム: クライアントアプリケーションが Auth0 認可サーバーにアクセストークンを要求する際、相互 TLS (mTLS) 接続を確立します。この接続では、クライアントアプリケーションとサーバーの双方が互いの X.509 証明書を提示し、検証します。
- バインディング: Auth0 認可サーバーは、発行したアクセストークンに、クライアントアプリケーションの証明書のサムプリントを含む確認 (
cnf) クレームを直接含めます。 - 所持証明: クライアントアプリケーションが mTLS にバインドされたアクセストークンを使用してリソースサーバーにアクセスする場合、同じ証明書を使用して再度 mTLS 接続を確立する必要があります。リソースサーバーは、クライアントアプリケーションが提示した証明書が、そのアクセストークンにバインドされている証明書と一致することを検証します。一致しない場合、リソースサーバーはリクエストを拒否します。
- 利点: 攻撃者がアクセストークンを盗んだとしても、正しい mTLS 接続の確立に必要な対応する秘密鍵と証明書を持っていないため、それを使用できません。mTLS による送信者制約は通常、X.509 証明書とその秘密鍵を安全に保管および管理できる、サーバーサイドアプリケーションなどの機密クライアントで使用されます。
-
アプリケーション層での Demonstrating Proof-of-Possession (DPoP) :
- メカニズム: DPoP はアプリケーション層で動作し、mTLS を必要としません。代わりに、クライアントアプリケーションは自身のために暗号鍵ペア (秘密鍵/公開鍵) を生成します。
- バインディング: アクセストークンを要求する際、クライアントアプリケーションは DPoP Proof JWT と呼ばれる JSON Web Token (JWT) を作成します。この Proof JWT にはクライアントの公開鍵が含まれ、クライアントの秘密鍵で署名されます。クライアントアプリケーションは、アクセストークン要求とともに DPoP Proof JWT を送信します。Auth0 認可サーバーは DPoP Proof JWT を検証し、その後、発行したアクセストークンをその公開鍵にバインドします。
- 所持証明: クライアントアプリケーションが DPoP にバインドされたアクセストークンを使用してリソースサーバーを呼び出す場合、その API リクエスト用に、秘密鍵で署名した別の DPoP Proof JWT を生成します。クライアントアプリケーションは、アクセストークンとあわせてヘッダーで DPoP Proof JWT を送信します。リソースサーバーは、確認 (
cnf) クレームを使用して、アクセストークンが DPoP Proof JWT 内の公開鍵にバインドされていること、および DPoP Proof JWT 自体が対応する秘密鍵で署名されていることを検証します。 - 利点: DPoP は公開鍵基盤を必要としないため、mTLS よりも柔軟です。SPA やモバイルアプリケーションなどのパブリッククライアントを含む、さまざまな種類のクライアントで使用できます。
mTLS と DPoP の比較
| 属性 | mTLS | DPoP |
|---|---|---|
| 動作レイヤー | トランスポート層 (TLS/SSL) | アプリケーション層 (HTTP ヘッダー) |
| 暗号方式 | 公開鍵基盤 (X.509 証明書) を使用 | 非対称鍵 (クライアント生成の鍵ペア) を使用 |
| 所持証明 | TLS ハンドシェイクと証明書の検証 | DPoP プルーフ (各リクエストの HTTP ヘッダーに含まれる署名付き JWT) |
| クライアントタイプ | 機密クライアント | パブリッククライアント (SPA、モバイルアプリ) |
はじめに
| 参照先 | 学べること |
|---|---|
| mTLS 送信者制約 | Auth0 における mTLS 送信者制約 の仕組みを、順を追って説明します。 |
| Demonstrating Proof-of-Possession (DPoP) | Auth0 における DPoP の仕組みを、順を追って説明します。 |
| Configure 送信者制約 | Auth0 でクライアントアプリケーションとリソースサーバーの 送信者制約 を設定する方法。 |