Skip to main content
Highly Regulated Identity 機能を利用するには、Highly Regulated Identity のアドオンを含む Enterprise プランが必要です。詳細については、Auth0 Pricing を参照してください。
JWT-Secured Authorization Request (JAR) は、認可リクエストのパラメーターの完全性と真正性を保護するための OAuth 2.0 プロトコル拡張です。パラメーターを署名付きの JSON Web Token (JWT) でまとめることで、中間者による機密性の高いリクエストデータの改ざんや閲覧を防ぐことができます。

前提条件

JAR を使用する前に、以下を行う必要があります。
  1. RSA キーペアを生成する
  2. JWT で保護された認可リクエストを設定する に記載されている手順に従って、公開キーを Auth0 Dashboard にアップロードして登録する

仕組み

scoperedirect_uri などのパラメーターを URL 内で平文として渡す代わりに、クライアントアプリケーションはそれらをリクエストオブジェクトとして署名付きの JSON Web Token (JWT) に格納します。
  • 署名: クライアントアプリケーションは秘密キーを使って JWT に署名します。
  • 検証: Auth0 Authorization Server は JWT を受け取り、登録済みの公開キーを使って署名を検証します。
  • 処理: JWT が有効であれば、Auth0 Authorization Server はそこからパラメーターを取り出します。JAR とクエリ文字列の両方に同じパラメーターがある場合は、JAR 内の値が優先されます。

JAR リクエストを生成する

お好みの言語でを生成するには、Auth0 JWT ライブラリ を使用します。 JWT ヘッダーは、検証に使用するキーとアルゴリズムを Auth0 に示します。次のパラメーターを含める必要があります。
  • alg: JWT の署名に使用するアルゴリズム。RS256、RS384、または PS256 のいずれかである必要があります。
  • typ: JWT のタイプ。jwt または oauth-authz-req+jwt のいずれかである必要があります。
ヘッダーには、JWT の署名に使用したキーを識別する kid フィールドを含めることもできます。kid がある場合、Auth0 は JAR の設定 で登録された公開キーの中から、一致するキー ID を持つものを探し、そのキーを使って JWT の署名を検証します。

ペイロード

ペイロードには認可パラメーターが含まれます。次のクレームを含める必要があります。
  • iss: アプリの client_id を指定する必要があります
  • aud: プロトコルと末尾のスラッシュを含むテナントのドメインを指定する必要があります。たとえば、https://{YOUR_DOMAIN}.auth0.com/ です
JWT には、/authorize の呼び出しに必要な必須パラメーターもすべて含める必要があります。たとえば、次のとおりです。
  • client_id: これにもアプリの client_id を指定する必要があります
  • response_type: 実行する フローを Auth0 に示します。認可コードグラントフローには code を使用します。
JWT には、要求しているの任意のパラメーター (audiencescopestateredirect_uri など) を含めることもできます。 さらに、JWT には次の任意のクレームを含めることができます。
  • iat: 数値の日付である必要があります。
  • nbf: 数値の日付である必要があり、過去の時点を表します。
  • exp: 数値の日付である必要があり、将来の時点を表します。
  • jti: 64 バイト以下の文字列である必要があります。

コード例: JAR を生成して署名する

次の Node.js の例では、jsonwebtoken ライブラリ を使用して JAR を生成し、署名します。

認可エンドポイントを呼び出す

JAR は、次のいずれかの方法で Auth0 Authorization Server に送信できます。
  1. 標準の JAR リクエスト: 署名付き JWT を、リクエストパラメーターで URL エンコードした文字列として渡します。
  2. プッシュ型認可リクエスト: セキュリティを強化し、URL 長の制限を回避するには、PAR を使用します。

標準のJARリクエスト

標準のJARリクエストを使用して/authorizeエンドポイントを呼び出すには:
  1. 新しいブラウザーウィンドウを開きます。
  2. client_id パラメーターに、署名してURLエンコードしたJWTを request パラメーターに指定します。

プッシュ型認可リクエスト

プッシュ型認可リクエストを使用して /authorize エンドポイントを呼び出すには、次の手順に従います。
  1. バックチャネルの POST リクエストで、JAR を /oauth/par エンドポイントに送信します。
  2. Auth0 から request_uri が返されるので、それを使用して 通常の PAR フロー と同様に /authorize エンドポイントを呼び出せます。
次の cURL リクエストでは、PAR と JAR を組み合わせて使用しています。

詳細はこちら