> ## 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）で Rules を使用する方法を学びます。Authorization Core 機能セットで使用します。

# サンプルユースケース: Authorization と併用する Rules

<Warning>
  Rules と Hooks のサポート終了 (EOL) 日は **2026年11月18日** です。また、**2023年10月16日** 以降に作成された新しいテナントでは、すでに利用できなくなっています。アクティブな Hooks を持つ既存のテナントは、サポート終了まで Hooks へのアクセスを維持できます。

  Auth0 の拡張には、Actions の使用を強くお勧めします。Actions では、豊富な型情報、インラインドキュメント、公開 `npm` パッケージを利用できるほか、外部統合に接続して、拡張性に関する全体的な開発体験を向上させることができます。Actions の詳細については、[Understand How Auth0 Actions Work](/ja/docs/customize/actions/actions-overview) を参照してください。

  移行を支援するために、[Rules から Actions への移行](/ja/docs/customize/actions/migrate/migrate-from-rules-to-actions) と [Hooks から Actions への移行](/ja/docs/customize/actions/migrate/migrate-from-hooks-to-actions) のガイドを用意しています。また、機能比較、[Actions のデモ](https://www.youtube.com/watch?v=UesFSY1klrI)、および移行に役立つその他のリソースをまとめた専用の [Move to Actions](https://auth0.com/extensibility/movetoactions) ページもあります。

  Rules と Hooks の非推奨化について詳しくは、ブログ記事 [Preparing for Rules and Hooks End of Life](https://auth0.com/blog/preparing-for-rules-and-hooks-end-of-life/) を参照してください。
</Warning>

[Rules](/ja/docs/customize/rules) を使用すると、事前構成された[認可ポリシー](/ja/docs/manage-users/access-control/authorization-policies)による判定結果を変更または補完し、[ロールベースのアクセス制御 (RBAC) ](/ja/docs/manage-users/access-control/rbac) だけでは対応できない、より複雑なケースを処理できます。実行順序に応じて、Rules は権限が <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>

たとえば、あるアプリケーションを平日のみアクセス可能にしたい場合は、[次のルールを作成します](/ja/docs/customize/rules/create-rules):

```js lines theme={null}
function (user, context, callback) {

  if (context.clientName === 'APP_NAME') {
    const d = Date.getDay();

    if (d === 0 || d === 6) {
      return callback(new UnauthorizedError('This app is only available during the week.'));
    }
  }

  callback(null, user, context);
}
```

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

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

たとえば、アプリケーションへのアクセスを許可する対象を、社内ネットワーク内からそのアプリケーションにアクセスしているユーザーのみに制限したいとします。その場合は、次のルールを作成します。

```js lines theme={null}
function (user, context, callback) {
  const ipaddr = require('ipaddr.js@1.9.0');
  const corp_network = "192.168.1.134/26";
  const current_ip = ipaddr.parse(context.request.ip);

  if (!current_ip.match(ipaddr.parseCIDR(corp_network))) {
    return callback(new UnauthorizedError('This app is only available from inside the corporate network.'));
  };

  callback(null, user, context);
}
```

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

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

たとえば、API を呼び出しているすべてのユーザーのアクセスを拒否したいとします。つまり、API の `audience` の値に基づいてアクセスを拒否する必要があります。この値は、[Dashboard > Applications > APIs](https://manage.auth0.com/#/apis) の API にある **API <Tooltip tip="対象者: 発行されたトークンの対象者を一意に識別する値です。トークン内では aud という名前で、その値には、IDトークン の場合はアプリケーション（クライアントID）の ID、アクセストークン の場合は API（API Identifier）の ID が含まれます。" cta="用語集を見る" href="/ja/docs/glossary?term=Audience">対象者</Tooltip>** フィールドで確認できます。これを行うには、次の ルール を作成します。

```js lines theme={null}
function (user, context, callback) {
  /*
   *  オーディエンスに基づいてユーザーベースのフローへのアクセスを拒否する
   */
  var audience = '';
  audience = audience
              || (context.request && context.request.query && context.request.query.audience)
              || (context.request && context.request.body && context.request.body.audience);
  if (audience === 'http://todoapi2.api' || !audience) {
    return callback(new UnauthorizedError('end_users_not_allowed'));
  }
  return callback(null, user, context);
}
```

この場合、API の `audience` 値は `http:://todoapi2.api` であるため、このオーディエンスを拒否します。誰かがこの `audience` 値を使用して API へのアクセスを試みた場合、アクセスは拒否され、`HTTP 401` レスポンスが返されます。

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

[API の RBAC を有効化](/ja/docs/get-started/apis/enable-role-based-access-control-for-apis)し、あわせて "Add Permissions in the Access Token" も有効にするか (または <Tooltip tip="Management API: お客様が管理タスクを実行するための製品 API です。" cta="用語集を表示" href="/ja/docs/glossary?term=Management+API">Management API</Tooltip> を使用して RBAC を有効にし、**Token Dialect** を `access_token_authz` に設定すると) 、アクセストークンにユーザーの権限が含まれるようになります。トークンにユーザーのロールを追加するには、次の ルール を作成するときに `context.authorization` オブジェクトを使用します。

```js lines theme={null}
function (user, context, callback) {
  const namespace = 'http://demozero.net';
  const assignedRoles = (context.authorization || {}).roles;

  let idTokenClaims = context.idToken || {};
  let accessTokenClaims = context.accessToken || {};

  idTokenClaims[`${namespace}/roles`] = assignedRoles;
  accessTokenClaims[`${namespace}/roles`] = assignedRoles;

  context.idToken = idTokenClaims;
  context.accessToken = accessTokenClaims;

  callback(null, user, context);
}
```

<div id="manage-delegated-administration-extension-roles-using-the-authorization-core-feature-set">
  ## Authorization Core 機能セットを使用して Delegated Administration Extension のロールを管理する
</div>

[Delegated Administration Extension (DAE)](/ja/docs/customize/extensions/delegated-administration-extension) と Authorization Core 機能セットは完全に別個の機能ですが、ルールを使用することで、Authorization Core 機能セットを使って DAE のロールを作成および管理できます。

1. Authorization Core 機能セットを使用して [DAE ロールを作成します](/ja/docs/manage-users/access-control/configure-core-rbac/roles/create-roles)。作成するロールの名前は、[事前定義された DAE ロール](/ja/docs/customize/extensions/delegated-administration-extension#assign-roles-to-users)の名前と一致している必要があります。
2. Authorization Core 機能セットを使用して、[作成した DAE ロールを適切なユーザーに割り当てます](/ja/docs/manage-users/access-control/configure-core-rbac/rbac-users/assign-roles-to-users)。
3. ユーザーのロールを IDトークンの DAE 名前空間に追加します。そのためには、次の[ルールを作成](/ja/docs/customize/rules/create-rules)し、`CLIENT_ID` プレースホルダーの値をアプリケーションのクライアントIDに置き換えてください。

```js lines theme={null}
function (user, context, callback) {
    if (context.clientID === 'CLIENT_ID') {
        const namespace = 'https://example.com/auth0-delegated-admin';
        context.idToken[namespace] = {
            roles: (context.authorization || {}).roles
        };
    }
    callback(null, user, context);
}
```

<Warning>
  Auth0 は、[OpenID Connect (OIDC) 仕様](https://openid.net/specs/openid-connect-core-1_0.html#StandardClaims)で定義された構造化クレーム形式でプロファイル情報を返します。つまり、IDトークンまたはアクセストークンに追加するカスタムクレームは、競合の可能性を避けるため、[ガイドラインと制限事項に準拠する](/ja/docs/secure/tokens/json-web-tokens/create-custom-claims)必要があります。
</Warning>
