> ## Documentation Index
> Fetch the complete documentation index at: https://translations.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

> RBAC と併用する Actions の使い方を学びます。

# サンプルユースケース: 認可における Actions

Auth0 の [Actions](/ja/docs/customize/actions) を使用すると、事前設定された[認可ポリシー](/ja/docs/manage-users/access-control/authorization-policies)による判断結果を変更または補完できるため、[ロールベースのアクセス制御 (RBAC) ](/ja/docs/manage-users/access-control/rbac) だけでは対応できない、より複雑なケースにも対応できます。実行される順序に応じて、Actions は権限が <Tooltip tip="アクセストークン: API へのアクセスに使用される、不透明な文字列または JWT 形式の認可資格情報。" cta="用語集を見る" href="/ja/docs/glossary?term=Access+Token">アクセストークン</Tooltip> に追加される前に、認可の判断結果を変更できます。また、トークンの内容をカスタマイズすることもできます。

<div id="allow-access-only-on-weekdays-for-a-specific-application">
  ## 特定のアプリケーションへのアクセスを平日のみに制限する
</div>

特定のアプリケーションに平日のみアクセスできるようにしたい場合は、[新しい Action を作成し](/ja/docs/customize/actions/write-your-first-action)、Action をログインフローに追加するため、`Login / Post Login` トリガーを選択します。次のコードを Actions Code Editor にコピーします。

```js lines theme={null}
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](https://manage.auth0.com/#/actions/flows/login/) に追加します。Actions を Flows に関連付ける方法については、[Write Your First Action](/ja/docs/customize/actions/write-your-first-action) の「Attach the Action to a flow」セクションを参照してください。

ユーザーが週末にアプリケーションへアクセスしようとした場合、認証に成功し、適切な権限を持っていても、アクセスは拒否されます。

<div id="allow-access-only-to-users-who-are-inside-the-corporate-network">
  ## 社内ネットワーク内のユーザーにのみアクセスを許可する
</div>

たとえば、アプリケーションへのアクセスを許可する対象を、社内ネットワーク内からそのアプリケーションにアクセスしているユーザーのみに限定したいとします。[新しいActionを作成し](/ja/docs/customize/actions/write-your-first-action)、ログインフローに Action を追加するため、`Login / Post Login` トリガーを選択します。次のコードを Actions Code Editor にコピーします。

```js lines theme={null}
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](https://manage.auth0.com/#/actions/flows/login/) に追加してください。Actions を Flow に関連付ける方法については、[Write Your First Action](/ja/docs/customize/actions/write-your-first-action) の「Attach the Action to a flow」セクションを参照してください。

ユーザーが社内ネットワーク外からアクセスしている場合は、認証に成功し、必要な権限を持っていても、アクセスは拒否されます。

<Callout icon="file-lines" color="#0EA5E9" iconType="regular">
  `ipaddr.js` のような `npm` ライブラリを使用するには、そのライブラリを Action の依存関係として追加する必要があります。詳しくは、[Write Your First Action](/ja/docs/customize/actions/write-your-first-action) の「Add a dependency」セクションを参照してください。
</Callout>

<div id="deny-access-to-anyone-calling-an-api">
  ## API を呼び出すすべてのユーザーのアクセスを拒否する
</div>

API を呼び出すすべてのユーザーのアクセスを拒否したいとします。つまり、API の `identifier` の値に基づいてアクセスを拒否する必要があります。この値は、[Auth0 Dashboard > Applications > APIs](https://manage.auth0.com/#/apis) にある API の **API <Tooltip tip="Audience: 発行されたトークンの対象者を一意に識別する値。トークン内では aud という名前で、その値には IDトークン の場合はアプリケーション（クライアントID）の ID、アクセストークン の場合は API（API Identifier）の ID が含まれます。" cta="用語集を表示" href="/ja/docs/glossary?term=Audience">対象者</Tooltip>** フィールドで確認できます。[新しい Action を作成](/ja/docs/customize/actions/write-your-first-action)し、Action を ログインフロー に追加するため、`Login / Post Login` トリガーを選択します。次のコードを Actions Code Editor にコピーします。

```js lines theme={null}
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 を [ログインフロー](https://manage.auth0.com/#/actions/flows/login/) に追加します。Actions を Flows に追加する方法については、[Write Your First Action](/ja/docs/customize/actions/write-your-first-action) の "Attach the Action to a flow" セクションを参照してください。

この場合、API の `identifier` の値は `https://api.example.com` であるため、この値のオーディエンスを拒否します。

<div id="add-user-roles-to-tokens">
  ## トークンにユーザーのロールを追加する
</div>

Auth0 が発行したトークンにユーザーのロールを追加するには、`event.authorization` オブジェクトと、`api.idToken.setCustomClaim` および `api.accessToken.setCustomClaim` メソッドを使用します。[新しい Action を作成](/ja/docs/customize/actions/write-your-first-action)し、この Action を ログインフロー に追加するため、`Login / Post Login` トリガーを選択します。以下のコードを Actions Code Editor にコピーします。

```js lines theme={null}
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 を [ログインフロー](https://manage.auth0.com/#/actions/flows/login/) に追加します。Actions を Flow に関連付ける方法については、[Write Your First Action](/ja/docs/customize/actions/write-your-first-action) の「Action をフローに関連付ける」セクションを参照してください。

次の点に注意してください。

* リクエスト元のアプリケーションに返される <Tooltip tip="JSON Web Token（JWT）: 2 者間でクレームを安全に表現するために使用される標準の IDトークン 形式（多くの場合は アクセストークン の形式でもあります）。" cta="用語集を表示" href="/ja/docs/glossary?term=JWT">JWT</Tooltip> は、トリガー処理の最後に生成され、署名されます。最終的に署名された JWT には、Action からアクセスできません。

<div id="deny-access-to-specific-ja3ja4-fingerprints">
  ## 特定の JA3/JA4 フィンガープリントからのアクセスを拒否する
</div>

`event.security_context` オブジェクトには、現在のトランザクションの JA3/JA4 フィンガープリント値が含まれています。

[新しい Action を作成](/ja/docs/customize/actions/write-your-first-action)し、Action をログインフローに追加するため、`Login / Post Login` トリガーを選択します。次のコードを Actions Code Editor にコピーします。

```js lines theme={null}
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](https://manage.auth0.com/#/actions/flows/login/)に追加します。ActionsをFlowにアタッチする方法については、[Write Your First Action](/ja/docs/customize/actions/write-your-first-action)の「Action をフローにアタッチする」セクションを参照してください。
