メインコンテンツへスキップ
Auth0 の Actions を使用すると、事前設定された認可ポリシーによる判断結果を変更または補完できるため、ロールベースのアクセス制御 (RBAC) だけでは対応できない、より複雑なケースにも対応できます。実行される順序に応じて、Actions は権限が に追加される前に、認可の判断結果を変更できます。また、トークンの内容をカスタマイズすることもできます。

特定のアプリケーションへのアクセスを平日のみに制限する

特定のアプリケーションに平日のみアクセスできるようにしたい場合は、新しい Action を作成し、Action をログインフローに追加するため、Login / Post Login トリガーを選択します。次のコードを Actions Code Editor にコピーします。
exports.onExecutePostLogin = async (event, api) => {
  if (event.client.name === "APP_NAME") {
    const d = new Date().getDay();

    if (d === 0 || d === 6) {
      api.access.deny("This app is only available during the week.");
    }
  }
}
最後に、作成した Action を Login Flow に追加します。Actions を Flows に関連付ける方法については、Write Your First Action の「Attach the Action to a flow」セクションを参照してください。 ユーザーが週末にアプリケーションへアクセスしようとした場合、認証に成功し、適切な権限を持っていても、アクセスは拒否されます。

社内ネットワーク内のユーザーにのみアクセスを許可する

たとえば、アプリケーションへのアクセスを許可する対象を、社内ネットワーク内からそのアプリケーションにアクセスしているユーザーのみに限定したいとします。新しいActionを作成し、ログインフローに Action を追加するため、Login / Post Login トリガーを選択します。次のコードを Actions Code Editor にコピーします。
const ipaddr = require("ipaddr.js");

exports.onExecutePostLogin = async (event, api) => {
  const corpNetwork = "192.168.1.134/26";
  const currentIp = ipaddr.parse(event.request.ip);

  if (!currentIp.match(ipaddr.parseCIDR(corpNetwork))) {
    api.access.deny("This app is only available from inside the corporate network.");
  };
};
最後に、作成した Action を Login Flow に追加してください。Actions を Flow に関連付ける方法については、Write Your First Action の「Attach the Action to a flow」セクションを参照してください。 ユーザーが社内ネットワーク外からアクセスしている場合は、認証に成功し、必要な権限を持っていても、アクセスは拒否されます。
ipaddr.js のような npm ライブラリを使用するには、そのライブラリを Action の依存関係として追加する必要があります。詳しくは、Write Your First Action の「Add a dependency」セクションを参照してください。

API を呼び出すすべてのユーザーのアクセスを拒否する

API を呼び出すすべてのユーザーのアクセスを拒否したいとします。つまり、API の identifier の値に基づいてアクセスを拒否する必要があります。この値は、Auth0 Dashboard > Applications > APIs にある API の API フィールドで確認できます。新しい Action を作成し、Action を ログインフロー に追加するため、Login / Post Login トリガーを選択します。次のコードを Actions Code Editor にコピーします。
exports.onExecutePostLogin = async (event, api) => {
  // Actions では、API はリソースサーバーと呼ばれます。
  const { identifier } = event.resource_server || {};
  if (identifier === "https://api.example.com") {
    api.access.deny("end_users_not_allowed");
  }
}
最後に、作成した Action を ログインフロー に追加します。Actions を Flows に追加する方法については、Write Your First Action の “Attach the Action to a flow” セクションを参照してください。 この場合、API の identifier の値は https://api.example.com であるため、この値のオーディエンスを拒否します。

トークンにユーザーのロールを追加する

Auth0 が発行したトークンにユーザーのロールを追加するには、event.authorization オブジェクトと、api.idToken.setCustomClaim および api.accessToken.setCustomClaim メソッドを使用します。新しい Action を作成し、この Action を ログインフロー に追加するため、Login / Post Login トリガーを選択します。以下のコードを Actions Code Editor にコピーします。
exports.onExecutePostLogin = async (event, api) => {
  const namespace = 'https://my-app.example.com';
  if (event.authorization) {
    api.idToken.setCustomClaim(`${namespace}/roles`, event.authorization.roles);
    api.accessToken.setCustomClaim(`${namespace}/roles`, event.authorization.roles);
  }
}
最後に、作成した Action を ログインフロー に追加します。Actions を Flow に関連付ける方法については、Write Your First Action の「Action をフローに関連付ける」セクションを参照してください。 次の点に注意してください。
  • リクエスト元のアプリケーションに返される は、トリガー処理の最後に生成され、署名されます。最終的に署名された JWT には、Action からアクセスできません。

特定の JA3/JA4 フィンガープリントからのアクセスを拒否する

event.security_context オブジェクトには、現在のトランザクションの JA3/JA4 フィンガープリント値が含まれています。 新しい Action を作成し、Action をログインフローに追加するため、Login / Post Login トリガーを選択します。次のコードを Actions Code Editor にコピーします。
exports.onExecutePreUserRegistration = async (event, api) => {
  const clientJa4 = event?.security_context?.ja4;
  console.log('[ACTION]', {clientJa4});
  const badFingerprints = ['t13d1517h2_8daaf6152771_b6f405a00624','t13d1516h2_8daaf6152771_d8a2da3f94cd'];
  if (clientJa4 && badFingerprints.includes(clientJa4)){
    api.access.deny('suspicious_tls_fingerprint', 'Your TLS fingerprint has been flagged as suspicious');
  }
};
最後に、作成したActionをLogin Flowに追加します。ActionsをFlowにアタッチする方法については、Write Your First Actionの「Action をフローにアタッチする」セクションを参照してください。