Client Credentials フロー を通じて発行されるトークンでは、Hooks を追加することで、スコープを変更したり、カスタムクレームを追加したりできます。
Hooks を使用すると、Node.js コードで Auth0 の動作をカスタマイズできます。Hooks は、Auth0 プラットフォームの特定の拡張ポイント (Client Credentials フローなど) に関連付けられた、安全で自己完結型の関数です。Auth0 は実行時に Hooks を呼び出して、カスタムロジックを実行します。
Hooks は、 または を使用して管理できます。
特定の拡張ポイントに対して複数の Hook を作成できますが、各拡張ポイントで同時に有効にできる Hook は 1 つだけです。その拡張ポイントに対して後から作成した Hook は自動的に無効になるため、明示的に有効化する必要があります。有効な Hook は、すべてのアプリケーションと API に対して実行されます。
このチュートリアルを開始する前に、次の作業を行ってください。
- Hook を作成: トークンをカスタマイズする Hook を作成します。
- Hook をテスト: Client Credentials フローを実行し、アクセストークンをデコードして、新しい Hook をテストします。
この例では、次のことを行います。
- アクセストークン に任意のクレーム (
https://foo.com/claim) を追加する
- 設定済みの API に権限を 1 つ追加する
トークンをカスタマイズする Hook を作成します。拡張ポイントの選択を求められたら、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);
};
先ほど作成した フック をテストするには、Client Credentials Exchange を実行して を取得し、それをデコードして内容を確認する必要があります。
トークンを取得するには、Client Credentials Flow エンドポイント に POST リクエストを送信します。CLIENT_ID、CLIENT_SECRET、API_IDENTIFIER のプレースホルダー値は、それぞれアプリケーションの 、アプリケーションの 、および API の識別子に置き換えてください。クライアントID とクライアントシークレットは Application の設定で、API の識別子は API の設定で確認できます。
成功すると、レスポンスには次が含まれます:
access_token
- 有効期限 (秒単位、
expires_in)
Bearer に設定されたトークンタイプ (token_type)
extra 権限 (scope、Hook によって追加)
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 Debugger を使用することです。
アクセストークンをコピーしてエディターに貼り付けます。 は自動的にデコードされ、内容が表示されます。
ペイロード の最後の 2 項目は、いずれもフックによって設定されていることに注意してください。
"scope": "extra"
"https://foo.com/claim": "bar"