メインコンテンツへスキップ
RulesとHooksのサポート終了(EOL)日は2026年11月18日であり、2023年10月16日の時点で作成された新しいテナントは使用できなくなります。Hooksが有効な既存のテナントは、サポート終了までHooksを利用できます。今後はActionsに移行して、Auth0の機能を拡張することを強くお勧めします。Actionsを使用すると、豊富な情報やインラインドキュメント、パブリックnpmパッケージにアクセスして、外部統合を使って全体的な拡張エクスペリエンスを強化することができます。Actionsの詳細については、「Auth0 Actionsの仕組みを理解する」をお読みください。当社では、移行の参考資料として、RulesからActionsへの移行HooksからActionsへの移行に関するガイドを提供しています。また、専用の「Actionsへの移行」ページでは、機能の比較やActionsのデモ、その他のリソースを掲載して、円滑な移行をサポートしています。RulesとHooksの廃止の詳細については、当社のブログ記事「RulesとHooksの提供終了について」をお読みください。
RulesとHooksの機能は2026年にサポートの終了を予定しているため、新しいルールやフックは、アクションへの移行をテストするためだけに、開発環境内で作成してください。RulesからActionsへの移行方法については、「RulesからActionsに移行する」をお読みください。HooksからActionsへの移行方法については、「HooksからActionsに移行する」をお読みください。
フックを追加することで、スコープを変更し、クライアントの資格情報フローで発行されたトークンのカスタムクレームを追加することができます。 フックによって、Node.jsコードを使用したAuth0の動作をカスタマイズすることができます。Auth0プラットフォーム(クライアントの資格情報フローなど)の特定の拡張ポイントに関連付けられた、安全で自己完結型の関数です。Auth0は実行時にフックを呼び出して、カスタムロジックを実行します。 フックは、またはを使って管理できます。
どの拡張ポイントにも複数のフックを作成できますが、1つの拡張ポイントで同時に有効にできるフックは1つに限られています。同じ拡張ポイントに対してその後作成するフックは、自動的に無効になるため、明示的に有効にしなければなりません。有効なフックは、すべてのアプリケーションとAPIに対して実行されます。

前提条件

このチュートリアルを始める前に:

ステップ

  1. フックを作成する:トークンをカスタマイズするフックを作成します。
  2. フックをテストする:クライアントの資格情報フローを実行し、アクセストークンをデコードすることで、新しいフックをテストします。

フックを作成する

この例では以下を行います。
  • 任意のクレーム(https://foo.com/claim)をアクセストークンに追加する
  • 追加の権限を構成済みAPIに追加する
トークンをカスタマイズするフックを作成します。拡張ポイントを選択するよう求められたら、[Client Credentials Exchange(クライアントの認証情報の交換)]を選択し、エディターに以下のコードを追加します。
module.exports = function(client, scope, audience, context, cb) {
  var access_token = {};
  access_token['https://foo.com/claim'] = 'bar';
  access_token.scope = scope;
  access_token.scope.push('extra');
  cb(null, access_token);
};
Auth0は、プロファイル情報をOpenID Connect(OIDC)仕様で定義されている構造化クレーム形式で返します。つまり、IDトークンまたはアクセストークンに追加するカスタムクレームは、衝突を避けるためにガイドラインと制限に従わなければなりません

フックをテストする

作成したフックをテストするには、クライアントの資格情報の交換を実行し、アクセストークンを取得してデコードし、その内容を確認する必要があります。

トークンを取得する

トークンを取得するには、POST呼び出しをクライアントの資格情報フローエンドポイントに対して行います。CLIENT_ID、CLIENT_SECRET、API_IDENTIFIERの各プレースホルダーの値をアプリケーションのクライアントID、アプリケーションのクライアントシークレット、APIの識別子にそれぞれ、必ず置き換えてください。クライアントIDとクライアントシークレットはアプリケーション設定、API識別子はAPI設定でそれぞれ確認できます。
curl --request POST \
--url 'https://{yourDomain}/oauth/token' \
--header 'content-type: application/x-www-form-urlencoded' \
--data grant_type=client_credentials \
--data 'client_id={yourClientId}' \
--data client_secret=YOUR_CLIENT_SECRET \
--data audience=YOUR_API_IDENTIFIER
``` lines
```csharp C# lines
var client = new RestClient("https://{yourDomain}/oauth/token");
var request = new RestRequest(Method.POST);
request.AddHeader("content-type", "application/x-www-form-urlencoded");
request.AddParameter("application/x-www-form-urlencoded", "grant_type=client_credentials&client_id={yourClientId}&client_secret=YOUR_CLIENT_SECRET&audience=YOUR_API_IDENTIFIER", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
正常な応答に含まれるもの:
  • access_token
  • 有効期限(秒)(expires_in
  • Bearerとして設定されたトークンのタイプ(token_type
  • extra権限(scope)(フックによって追加されたもの)
HTTP/1.1 200 OK
Content-Type: application/json
{
  "access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6Ik5ESTFNa05DTVRGQlJrVTRORVF6UXpFMk1qZEVNVVEzT1VORk5ESTVSVU5GUXpnM1FrRTFNdyJ9.eyJpc3MiOiJodHRwczovL2RlbW8tYWNjb3VudC5hdXRoMC3jb20vIiwic3ViIjoic0FRSlFpQmYxREw0c2lqSVZCb2pFRUZvcmRoa0o4WUNAY2xpZW50cyIsImF1ZCI6ImRlbW8tYWNjb3VudC5hcGkiLCJleHAiOjE0ODc3NjU8NjYsImlhdCI6MTQ4NzY3OTI2Niwic2NvcGUiOiJyZWFkOmRhdGEgZXh0cmEiLCJodHRwczovL2Zvby5jb20vY2xhaW0iOiKoPXIifQ.da-48mHY_7esfLZpvHWWL8sIH1j_2mUYAB49c-B472lCdsNFvpaLoq6OKQyhnqk9_aW_Xhfkusos3FECTrLFvf-qwQK70QtwbkbVye_IuPSTAYdQ2T-XTzGDm9Nmmy5Iwl9rNYLxVs2OoCdfpVMyda0OaI0AfHBgEdKWluTP67OOnV_dF3KpuwtK3dPKWTCo2j9VCa7X1I4h0CNuM79DHhY2wO7sL8WBej7BSNA3N2TUsp_YTWWfrvsr_vVhJf-32G7w_12ms_PNFUwj2C30ZZIPWc-uEkDztyMLdI-lu9q9TLrLdr0dOhfrtfkdeJx4pUSiHdJHf42kg7UAVK6JcA",
  "expires_in": 86400,
  "scope": "extra",
  "token_type": "Bearer"
}

トークンをデコードする

アクセストークンをデコードし、その内容を確認するための最も簡単な方法は、JWT.ioデバッガーを使用する方法です。 アクセストークンをコピーし、エディターに貼り付けます。は自動的にデコードされ、その内容が表示されます。 ペイロードの最後の2項目は共に、フックによって設定されています。
  • "scope": "extra"
  • "https://foo.com/claim": "bar"

もっと詳しく

I