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

# サンプルユースケース：認可のあるActions

> ActionsとRole-Based Access Control（RBAC）の使い方について説明します。

Auth0 [Actions](/docs/ja-jp/customize/actions)は、事前構成された[認可ポリシー](/docs/ja-jp/manage-users/access-control/authorization-policies)の決定結果を修正または補完できるため、[Role-based Access Control（RBAC）](/docs/ja-jp/manage-users/access-control/rbac)だけでは対応できないより複雑なケースを処理することができます。Actionsは実行順序に基づいて、アクセストークンにアクセス許可が追加される前に、認可での決定を変更することができます。また、トークンの内容をカスタマイズすることもできます。

## 特定のアプリケーションに平日のみのアクセスを許可する

たとえば、平日のみにアクセスを許可したいアプリケーションがあるとします。[新しいアクションを作成](/docs/ja-jp/customize/actions/write-your-first-action)し、ログインフローにアクションを追加するために`Login / Post Login`トリガーを選択します。以下のコードを［Actions Code Editor（アクションコードエディター）］にコピーします。

```javascript 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.");
    }
  }
}
```

そして、作成したアクションを[ログインフロー](https://manage.auth0.com/#/actions/flows/login/)に追加します。Actionsをフローにアタッチする方法については、「[初めてアクションを作成する](/docs/ja-jp/customize/actions/write-your-first-action)」の「アクションをフローにアタッチする」セクションをお読みください。

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

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

たとえば、アプリケーションへのアクセスを許可するのに、企業ネットワークの内側からアクセスするユーザーに限定したいとします。[新しいアクションを作成](/docs/ja-jp/customize/actions/write-your-first-action)し、ログインフローにアクションを追加するために`Login / Post login`トリガーを選択します。以下のコードをActionsコードエディターにコピーします。

```javascript 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.");
  };
};
```

そして、作成したアクションを[ログインフロー](https://manage.auth0.com/#/actions/flows/login/)に追加します。Actionsをフローにアタッチする方法については、「[初めてアクションを作成する](/docs/ja-jp/customize/actions/write-your-first-action)」の「アクションをフローにアタッチする」セクションをお読みください。

ユーザーが企業ネットワークの外側にいる場合には、たとえ認証に成功して、適切な権限があったとしても、アクセスが拒否されます。

<Callout icon="file-lines" color="#0EA5E9" iconType="regular">
  `ipaddr.js`などの`npm`ライブラリーを使用する場合は、依存関係としてアクションに追加しなければなりません。詳細については、「[初めてアクションを作成する](/docs/ja-jp/customize/actions/write-your-first-action)」の「依存関係を追加する」セクションをお読みください。
</Callout>

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

たとえば、APIを呼び出すユーザーのすべてに対して、アクセスを拒否したいとします。つまり、[［Auth0 Dashboard］ > ［Applications（アプリケーション）］ > ［APIs］](https://manage.auth0.com/#/apis)から、**APIオーディエンス** フィールドに記載された`識別子`の値に基づいてアクセスを拒否する必要があります。[新しいアクションを作成](/docs/ja-jp/customize/actions/write-your-first-action)し、ログインフローにアクションを追加するために`Login / Post login`トリガーを選択します。以下のコードをActionsコードエディターにコピーします。

```javascript lines theme={null}
exports.onExecutePostLogin = async (event, api) => {
  // In Actions, an API will be referred to as a Resource Server.
  const { identifier } = event.resource_server || {};
  if (identifier === "https://api.example.com") {
    api.access.deny("end_users_not_allowed");
  }
}
```

そして、作成したアクションを[ログインフロー](https://manage.auth0.com/#/actions/flows/login/)に追加します。Actionsをフローにアタッチする方法については、「[初めてアクションを作成する](/docs/ja-jp/customize/actions/write-your-first-action)」の「アクションをフローにアタッチする」セクションをお読みください。

この場合、APIの`identifier`の値は`https://api.example.com`であり、これが拒否する対象となるオーディエンスです。

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

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

```javascript 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);
  }
}
```

そして、作成したアクションを[ログインフロー](https://manage.auth0.com/#/actions/flows/login/)に追加します。Actionsをフローにアタッチする方法については、「[初めてアクションを作成する](/docs/ja-jp/customize/actions/write-your-first-action)」の「アクションをフローにアタッチする」セクションをお読みください。

注意：

* 要求元のアプリケーションに返される<Tooltip data-tooltip-id="react-containers-DefinitionTooltip-3" href="/docs/ja-jp/glossary?term=json-web-token" tip="JSON Web Token（JWT）: 二者間のクレームを安全に表現するために使用される標準IDトークン形式（および多くの場合、アクセストークン形式）。" cta="用語集の表示">JWT</Tooltip>は、トリガー処理の終わりに作成され、署名されます。最終の署名されたJWTは、アクションでは処理できません。
