OAuth/OIDC における mTLS
標準の /OIDC フローは、次のような理由から、必ずしも安全とは限りません。- クライアント認証の手段として、共有された を使用すること。
- が、本来想定されていない第三者にも使われる可能性があること。

/oauth/token エンドポイントを呼び出すと、生成される access token には、リソースサーバーがクライアントの TLS 証明書とその access token に対応する証明書が一致していることを検証するための情報が含まれます。

Auth0 における mTLS
Auth0 の mTLS は カスタムドメイン を基盤としており、証明書のプロビジョニングと検証には、お客様が既存で利用している mTLS インフラストラクチャを活用します。 通常、Client Secret が必要な Auth0 への認証済みクライアント呼び出しは、まず customer edge に送信されます。これは、顧客管理の証明書を使用する ですでに行われています。customer edge はクライアントとの mTLS ハンドシェイクを実行し、クライアント証明書を検証します。クライアント証明書の検証が完了すると、そのリクエストは、検証済みのクライアント証明書を HTTP ヘッダーに含み、さらにカスタムドメイン機能に従って正しいcname-api-key を付与したうえで、Auth0 上のテナントのエッジドメインに転送されます。

認可サーバーを呼び出す
mTLS はクライアント認証とアクセストークンのバインディングの両方に使用されるため、クライアントは、これらの機能が認可サーバーで有効になっているかどうかを把握しておく必要があります。さらに、認可サーバーの mTLS エンドポイントと非 mTLS エンドポイントは、異なるドメインで公開される場合があります。 認可サーバーの構成の詳細を取得するには、クライアントは OpenID Connect Discovery エンドポイントに GET リクエストを送信します:https://<custom-domain>/.well-known/openid-configuration
レスポンスが成功すると、OIDC ディスカバリー ドキュメント、つまり mTLS に関連するものを含む認可サーバーのプロパティとエンドポイントを一覧にした JSON オブジェクトが返されます。
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の外側で公開されているpushed_authorization_request_endpoint、つまりhttps://auth.bank.com/oauth/parを使用します。
詳しくは、RFC 8705のエンドポイント エイリアスに関する節を参照してください。
リソースサーバーを呼び出す
クライアントがアクセストークンを受け取ると、リソースサーバー上の保護されたリソースにアクセスできます。mTLS Token Binding が有効になっている場合、認可サーバーはtls_client_certificate_bound_access_tokens プロパティを含む OIDC ディスカバリー ドキュメントを返します。
クライアントが mTLS にバインドされたアクセストークンを使用してリソースサーバーを呼び出すと、リソースサーバーは TLS ハンドシェイク中にクライアントへ mTLS のクライアント証明書を要求します。リソースサーバーは、そのクライアント証明書と一致しないアクセストークンを含むリクエストを、401 HTTP ステータスコードと invalid_token エラーコードで拒否する必要があります。詳細については、Configure Resource Server for 送信者制約 を参照してください。