OAuth/OIDCのmTLS
デフォルトの/OIDCフローは、以下の問題から、常に安全であるとは限りません。- 共有クライアントシークレットがクライアント認証の形式に使用されている
- アクセストークンが意図しない当事者によって使用される

/oauth/token
エンドポイントを呼び出すと、クライアントのTLS証明書がアクセストークンの証明書に一致することを確認するためにリソースサーバーが使用する情報が、アクセストークンに含まれることになります。

Auth0でのmTLS
Auth0のmTLSはカスタムドメインを使って構築され、証明書のプロビジョニングと検証には顧客に既存のmTLS基盤が活用されます。 クライアントシークレットを通常必要とするAuth0への認証済みクライアント呼び出しは、まず、カスタマーエッジに送信されます。このアクションは、顧客が管理する証明書を使用するカスタムドメインではすでに起こっています。カスタマーエッジはクライアントとmTLSハンドシェイクを実行し、クライアント証明書を検証します。クライアント証明書が検証されたら、カスタムドメインの機能に基づいて、要求がAuth0でテナントのエッジドメインに転送されます(HTTPヘッダー内の検証済みクライアント証明書と正しいcname-api-key
を含む)。

認証サーバーを呼び出す
mTLSはクライアント認証とアクセストークンバインディングの両方を処理するため、クライアントはこれらの機能が認可サーバーで有効かどうか知っている必要があります。さらに、認可サーバーのmTLSエンドポイントと非mTLSエンドポイントは、異なるドメインに公開されることがあります。 認可サーバーの構成詳細を取得するために、クライアントはGET要求をOpenID Connect Discoveryエンドポイントhttps://<custom-domain>/.well-known/openid-configuration
に送信します。
応答に成功すると、OIDCディスカバリードキュメントまたはJSONオブジェクトが返され、認可サーバーのプロパティとエンドポイント(mTLSに関連するものを含む)が一覧表示されます。
mTLSクライアント認証が有効な場合、OIDCディスカバリードキュメントにはtoken_endpoint_auth_methods_supported
プロパティが含まれます。このプロパティには、tls_client_auth
またはself_signed_tls_client_auth
が含まれています。
tls_client_certificate_bound_access_tokens
プロパティをtrue:
に設定します。
mtls_endpoint_aliases
が公開されます。mTLSをサポートするクライアントの場合、mtls_endpoint_aliases
に表示されたエンドポイントが、mtls_endpoint_aliases
の外で公開された同じエンドポイントよりも優先されます。
以下のコードサンプルでは、token_endpoint
プロパティが2回公開されています。mTLSの呼び出しに使用するエンドポイントは、mtls_endpoint_aliases
またはhttps://mtls.auth.bank.com/oauth/token
に一覧表示されています。
mtls_endpoint_aliases
に一覧表示されていない場合は、mtls_endpoint_aliases
の外に一覧表示された同じエンドポイントを使用してください。上記の例では、pushed_authorization_request_endpoint
はmtls_endpoint_aliases
に一覧表示されていません。そのため、mtls_endpoint_aliases
またはhttps://auth.bank.com/oauth/par
の外に公開されたpushed_authorization_request_endpoint
を使用します。
詳細については、RFC 8705のエンドポイントに関するセクションを参照してください。
リソースサーバーを呼び出す
クライアントはアクセストークンを受け取ったら、リソースサーバーで保護されたリソースにアクセスすることができます。mTLSトークンバインディングが有効な場合、認可サーバーはtls_client_certificate_bound_access_tokens
プロパティを含むOIDCディスカバリードキュメントを返します。
クライアントがmTLSバウンドアクセストークンを使ってリソースサーバーを呼び出す場合、リソースサーバーはTLSハンドシェイク中にクライアントからmTLS証明書を要求します。リソースサーバーは、クライアント証明書が401 HTTPステータスコードとinvalid_token
エラーコードに一致しないアクセストークンを持つ要求を拒否する必要があります。詳細については、「送信者制限用にリソースサーバーを構成する」をお読みください。