/authorize
エンドポイントに送信された要求パラメーターの真正性と整合性を保護することができます。
機密アプリケーションとパブリックアプリケーションについては、「機密アプリケーションとパブリックアプリケーション」をお読みください。
アプリケーションの認証方法
Auth0からトークンを取得するには、アプリケーションがAuthentication APIを使って認証される必要があります。アプリケーションの認証について、Auth0は以下の方法に対応しています。- **クライアントシークレット:**対称認証方法。クライアントシークレット認証では、アプリケーションを作成した際にAuth0が生成したクライアントシークレットを使用します。
- **秘密鍵:**非対称認証方法。秘密鍵JWTでは、公開鍵と秘密鍵をペアで生成して、資格情報として使用します。公開鍵は提供し、秘密鍵はAuth0と共有することなく、独自のシステムに安全に保管します。
- **mTLS for :**非対称認証方法。mTLS for OAuthでは、Auth0に標準のX.509クライアント証明書を登録します。そして、それに対応する秘密鍵を使ってmTLSトンネルを確立し、Auth0テナントのエンドポイントに要求を送信します。
クライアントシークレット認証
クライアントシークレット認証は対称認証方法で、OAuth 2.0の仕様に含まれています。クライアントシークレット認証は、Auth0ではデフォルトの認証方法です。 この認証方法は、既存のアプリケーションやツールのすべてが対応しています。クライアントシークレットは高いエントロピーを持った値で、アプリケーションの作成時にAuth0によって生成され、アプリケーションとAuth0の両方で認識されます。アプリケーションが認証を行う際には、認可サーバーへの要求にクライアントシークレットを含めます。 クライアントシークレットを資格情報として使用することには、より高いセキュリティが求められるシナリオでは特に、セキュリティ上ある程度の危険が伴います。- アプリケーションが使用するシークレットはAuth0と共有されます。
- シークレットはネットワークを介して送信されるため、中間者攻撃(MiTM攻撃)が起きると通信を傍受される可能性があります。
させるには、認証方法に秘密鍵JWTの使用をお勧めします。
秘密鍵JWT認証
秘密鍵JWTは、エンタープライズプランでのみ使用できます。アップグレードするには、「Auth0の価格設定」からご連絡ください。
-
公開鍵と秘密鍵を構成します。
- 鍵のペアを生成します(1つの公開鍵と1つの秘密鍵)。
- 認証要求を行うアプリケーションに秘密鍵を登録し、公開鍵をIDプロバイダー(IdP)で登録します。
-
認可サーバへの要求にアサーションを構築します。
- 指定したJWT形式のクレームを使用して新しいアサーションを作成し、秘密鍵で署名します。IdPに対する要求の一部にこのアサーションを含めます。
- IdPが公開鍵を使用してアサーションを検証します。
- 秘密鍵はネットワークで送信されないため、アプリケーションの資格情報を暴露するリスクが軽減されます。Auth0などのIDプロバイダーは秘密鍵を知らないため、秘密鍵にアクセスできるアプリケーションのみが認証要求を作成できます。
- 署名されたアサーションは使用期限が短く、リプレイ攻撃を行う機会を制限します。
mTLS for OAuth
ハイリーレギュレーテッドアイデンティティ機能を使用するには、エンタープライズプランとハイリーレギュレーテッドアイデンティティアドオンが必要です。詳細については、「Auth0の価格設定」を参照してください。
mTLSエンドポイントのエイリアスを設定して、OAuthのmTLSに特定のサブドメインを使用することができます。
mTLSは、アクセストークンを攻撃から保護するために、トークンバインディングも提供しています。詳細については、「 トークンバインディング」と「認可サーバーを呼び出す」をお読みください。トークンバインディングをmTLSで使用するのに、事前に登録したアプリケーション資格情報(クライアント証明書など)は必要ありません。
JAR(JWT-Secured Authorization Request)
ハイリーレギュレーテッドアイデンティティ機能を使用するには、エンタープライズプランとハイリーレギュレーテッドアイデンティティアドオンが必要です。詳細については、「Auth0の価格設定」を参照してください。
鍵と証明書の登録
資格情報の用途や目的ごとに個別のキーペアを生成する必要があります。たとえば、JAR認証と秘密鍵JWT認証の両方に同じキーペアを使用しないでください。