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

# Auth0構成（SPA + API）

> SPA + APIアーキテクチャのシナリオでのAuth0の構成

このセクションでは、[Auth0 Dashboard](https://manage.auth0.com/#)での適用が必要なすべての設定を確認します。

<div id="create-the-api">
  ## APIを作成する
</div>

ダッシュボードの[APIセクション](https://manage.auth0.com/#/apis)に移動し、**［Create API（APIの作成）］** ボタンをクリックします。

APIについて、以下の詳細を入力するよう求められます。

* **［Name（名前）］** ：APIのフレンドリー名。いずれの機能にも影響しません。
* **［Identifier（識別子）］** ：APIに一意の識別子。URLの使用を推奨していますが、公開されたURLである必要はありません。Auth0がこのAPIを呼び出すことはありません。この値は後から変更することはできません。
* **［<Tooltip data-tooltip-id="react-containers-DefinitionTooltip-4" href="/docs/ja-JP/ja-jp/glossary?term=signing-algorithm" tip="署名アルゴリズム: トークンが改ざんされないように、トークンにデジタル署名するためのアルゴリズム。" cta="用語集の表示">Signing Algorithm</Tooltip>（署名アルゴリズム）］** ：トークンの署名に使用するアルゴリズム。使用可能な値は`HS256`と`RS256`です。RS256を選択すると、トークンはテナントの秘密鍵で署名されます。署名アルゴリズムの詳細については、「[署名アルゴリズム](/docs/ja-JP/ja-jp/get-started/applications/signing-algorithms)」を参照してください。

<Frame>
  <img src="https://mintcdn.com/generaltranslationinc/xDgF_gm8-0tTk54s/docs/images/ja-jp/cdy7uua7fh8z/4kIH4BQc4vDel2zhJ6lwCE/5fc39d821df752269175fa5e47440419/Create_API_form.png?fit=max&auto=format&n=xDgF_gm8-0tTk54s&q=85&s=eee2933edb9431016cb662c981db42c4" alt="Dashboard -アプリケーション API - APIの作成 - ポップアップ" width="652" height="782" data-path="docs/images/ja-jp/cdy7uua7fh8z/4kIH4BQc4vDel2zhJ6lwCE/5fc39d821df752269175fa5e47440419/Create_API_form.png" />
</Frame>

必要な情報を入力し、**［Create（作成）］** ボタンをクリックします。

<div id="configure-the-scopes">
  ## スコープを構成する
</div>

アプリケーションが作成されたら、認可の際にアプリケーションが要求できるスコープを構成する必要があります。

APIの設定で、［Permissions（アクセス許可）］タブに移動します。このセクションでは、ビジネスケースのスコープ（`read:timesheets`、`create:timesheets`、`delete:timesheets`、`approve:timesheets`）を追加することができます。

<Frame>
  <img src="https://mintcdn.com/generaltranslationinc/Vfs3K4sBEwnXQ0uD/docs/images/ja-jp/cdy7uua7fh8z/xxMOKezob6gNHJ0CcKhcg/637cc070d9e00e22b070d0cffed7bba0/Gift_Shop_Module_-_Permissions.png?fit=max&auto=format&n=Vfs3K4sBEwnXQ0uD&q=85&s=dada90d4f947b1c37316a572edc63b2a" alt="Dashboard - アプリケーション - API - アクセス許可" width="1294" height="949" data-path="docs/images/ja-jp/cdy7uua7fh8z/xxMOKezob6gNHJ0CcKhcg/637cc070d9e00e22b070d0cffed7bba0/Gift_Shop_Module_-_Permissions.png" />
</Frame>

<div id="create-the-application">
  ## アプリケーションを作成する
</div>

Autho0には、アプリケーションの種類が4つあります。

* **ネイティブアプリ** （モバイルまたはデスクトップアプリで使用）
* **シングルページWebアプリ**
* **通常のWebアプリ**
* **マシンツーマシンアプリ** （CLI、デーモン、またはバックエンドで実行中のサービスで使用）

このシナリオでは、SPA用に新しいアプリケーションを作成するため、シングルページアプリケーションのタイプを選びます。

新しいアプリケーションを作成するには、[ダッシュボード](https://manage.auth0.com/#)に移動し、左側のメニューにある［[Applications](https://manage.auth0.com/#/applications)（アプリケーション）］をクリックします。**［+ Create Application（アプリケーションの作成）］** ボタンをクリックします。

アプリケーションの名前を設定し（ここでは`Timesheets SPA`とします）、タイプに`Single-Page Web App`を選択します。

**［Create（作成）］** をクリックします。

今のところは以上です。SPA実装を完了したら、ダッシュボードとこのアプリケーションの設定をもう一度確認し、構成にいくつかの変更を加えます。

<div id="configure-the-authorization-extension">
  ## 認可拡張機能を設定する
</div>

テナントにAuthorization Extension（認可拡張機能）がインストールされていることを確認する必要があります。確認方法の詳細については、「[認可拡張機能](/docs/ja-JP/ja-jp/customize/extensions/authorization-extension)」のドキュメントを参照してください。

<div id="define-permissions">
  ### アクセス許可を定義する
</div>

次に、すでに定義済みのスコープ（`read:timesheets`、`create:timesheets`、`delete:timesheets`、`approve:timesheets`）に従って、必要なアクセス許可を定義する必要があります。

認可拡張機能で **［Permissions（アクセス許可）］** タブをクリックし、**［Create Permission（アクセス許可の作成）］** ボタンをクリックします。

ダイアログで、各アクセス許可の詳細を指定します。

アクセス許可の名前が、対応するスコープと完全に同一であることを確認します。

<Frame>
  <img src="https://mintcdn.com/generaltranslationinc/UCtxRPLKKGiAgiWv/docs/images/ja-jp/cdy7uua7fh8z/6G4X14X3A73IDRwOrkmttq/e0c20c44a32e0b39a6d8fb72731ffbaf/create-permission.png?fit=max&auto=format&n=UCtxRPLKKGiAgiWv&q=85&s=6a4a1cf060c9653e9745302ca761ca76" alt="Dashboard - Extensions - Authorization Extension - Create Permission" width="1264" height="794" data-path="docs/images/ja-jp/cdy7uua7fh8z/6G4X14X3A73IDRwOrkmttq/e0c20c44a32e0b39a6d8fb72731ffbaf/create-permission.png" />
</Frame>

引き続き、残りのすべてのスコープにアクセス許可を作成します。

<div id="define-roles">
  ### ロールを定義する
</div>

次に、従業員とマネージャーという2つのロールを構成しましょう。

**［Roles（ロール）］** タブで、**［Create Role（ロールの作成）］** ボタンをクリックし、**［Timesheets SPA（タイムシートSPA）］** アプリケーションを選択します。

**［Name（名前）］** と **［Description（説明）］** を`Employee`に設定し、`delete:timesheets`、`create:timesheets`、および`read:timesheets`のアクセス許可を選択します。**［Save（保存）］** をクリックします。

次に、同じ手順で`Manager`ロールを作成し、すべてのアクセス許可が選択されていることを確認します。

<div id="assign-users-to-roles">
  ### ユーザーをロールに割り当てる
</div>

すべてのユーザーを`Manager`または`Employee`ロールに割り当てる必要があります。

認可拡張機能の **［Users（ユーザー）］** タブに移動し、ユーザーを選択します。

ユーザー情報画面で、**［Roles（ロール）］** タブに移動します。**［Add Role to User（ユーザーにロールを追加）］** ボタンをクリックし、適切なロールを選択します。

<div id="configuring-the-authorization-extension">
  ### 認可拡張機能を構成する
</div>

また、認可拡張機能に関するルールが公開されていることも確認する必要があります。

これを実行するには、認可拡張機能の右上にあるユーザーアバターをクリックして、**［Configuration（構成）］** を選択します。

**［Permissions（アクセス許可）］** が有効であることを確認し、**［Publish Rule（ルールの公開）］** をクリックします。

<div id="create-a-rule-to-validate-token-scopes">
  ### トークンのスコープを検証するルールを作成する
</div>

このプロセスの最後のステップでは、ユーザーに割り当てられたアクセス許可に基づいて、アクセストークンに含まれるスコープが有効であることを確認するルールを作成します。ユーザーに無効なすべてのスコープは必ず、アクセストークンから削除します。

<Tooltip data-tooltip-id="react-containers-DefinitionTooltip-0" href="/docs/ja-JP/ja-jp/glossary?term=auth0-dashboard" tip="Auth0 Dashboard: サービスを構成するためのAuth0の主製品。" cta="用語集の表示">Auth0 Dashboard</Tooltip>で、**［Rules（ルール）］** タブに移動します。認可拡張機能によって作成されたルールが表示されているはずです。**［Create Role（ルールの作成）］** ボタンをクリックし、**［Empty Rule（空のルール）］** テンプレートを選択します。このルールに「**<Tooltip data-tooltip-id="react-containers-DefinitionTooltip-3" href="/docs/ja-JP/ja-jp/glossary?term=access-token" tip="アクセストークン: APIへのアクセスに使用される、不透明な文字列またはJWT形式の認可資格情報。" cta="用語集の表示">Access Token</Tooltip> Scopes（アクセストークンスのコープ）**」のような名前を付けて、そのルールに次のコードを指定することができます。

```javascript lines theme={null}
function (user, context, callback) {
  var permissions = user.permissions || [];
  var requestedScopes = context.request.body.scope || context.request.query.scope;
  var filteredScopes = requestedScopes.split(' ').filter( function(x) {
    return x.indexOf(':') < 0;
  });

  var allScopes = filteredScopes.concat(permissions);
  context.accessToken.scope = allScopes.join(' ');

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

上記のコードは、ユーザーのアクセス許可に有効な正しい形式のスコープ（例：`action:area`、`delete:timesheets`）のみが、すべてのアクセストークンに含まれることを確実にします。作業が完了したら、**［Save（保存）］** ボタンをクリックします。

ルールは、［Rules（ルール）］ページに表示されている順番に実行されます。そのため、作成した新しいルールが認可拡張機能のルールより下に来るようにしてください。そうすれば、認可拡張機能のルールより後に実行されます。
