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

# 使用例: Authorization でのルール

<Warning>
  Rules と Hooks のサポート終了 (EOL) 日は **2026年11月18日** です。これらは **2023年10月16日** 以降に作成された新規テナントでは、すでに利用できません。Hooks が有効な既存テナントでは、サポート終了日まで Hooks 製品へのアクセスが維持されます。

  Auth0 を拡張するには、Actions の利用を強くおすすめします。Actions では、豊富な型情報、インラインドキュメント、公開 `npm` パッケージを利用できるほか、外部連携にも接続できるため、拡張性をより効果的に活用できます。Actions の詳細については、[Understand How Auth0 Actions Work](/docs/ja-jp/customize/actions/actions-overview) を参照してください。

  移行を支援するために、[Rules から Actions への移行](/docs/ja-jp/customize/actions/migrate/migrate-from-rules-to-actions) と [Hooks から Actions への移行](/docs/ja-jp/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](/docs/ja-jp/customize/rules) を使用すると、事前設定された [authorization policy](/docs/ja-jp/manage-users/access-control/authorization-policies) による判定結果を変更または補完し、[role-based access control (RBAC)](/docs/ja-jp/manage-users/access-control/rbac) だけでは対応できない、より複雑なケースを処理できます。ルールは実行順序に応じて、権限が <Tooltip tip="Access Token: API へのアクセスに使用される、難読化文字列または JWT 形式の認可資格情報。" cta="用語集を見る" href="/docs/ja-jp/glossary?term=Access+Token">Access Token</Tooltip> に追加される前に、認可判定の結果を変更できます。また、トークンの内容をカスタマイズすることもできます。

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

特定のアプリケーションについて、平日のみアクセスできるようにしたい場合は、[次のルールを作成します](/docs/ja-jp/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="Audience: 発行されたトークンの対象者を一意に識別する識別子。トークン内では aud という名前で、ID Token の場合はアプリケーション（Client ID）、Access Token の場合は API（API Identifier）の ID がその値に含まれます。" cta="用語集を見る" href="/docs/ja-jp/glossary?term=Audience">Audience</Tooltip>** フィールドで確認できます。これを行うには、次のルールを作成します。

```js lines theme={null}
function (user, context, callback) {
  /*
   *  audienceに基づいてユーザーベースのフローへのアクセスを拒否する
   */
  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 を有効にし](/docs/ja-jp/get-started/apis/enable-role-based-access-control-for-apis)、あわせて "Add Permissions in the Access Token" を有効にする (または <Tooltip tip="Management API: 顧客が管理タスクを実行できるようにするための製品。" cta="用語集を見る" href="/docs/ja-jp/glossary?term=Management+API">Management API</Tooltip> 経由で RBAC を有効にし、**Token Dialect** を `access_token_authz` に設定する) と、Access Token にユーザー権限が含まれるようになります。トークンにユーザーロールを追加するには、次のルールを作成する際に `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)](/docs/ja-jp/customize/extensions/delegated-administration-extension) と Authorization Core 機能セットは完全に別の機能ですが、ルールを使用することで、Authorization Core 機能セットを使って DAE のロールを作成および管理できます。

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

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