> ## 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.

# Auth0の構成（モバイルアプリ + API）

> モバイルアプリ + APIアーキテクチャのシナリオでのAuth0の構成

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

## APIを作成する

左側の[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/glossary?term=signing-algorithm" tip="署名アルゴリズム: トークンが改ざんされないように、トークンにデジタル署名するためのアルゴリズム。" cta="用語集の表示">Signing Algorithm</Tooltip>（署名アルゴリズム）］** ： トークンの署名に使用するアルゴリズム。使用可能な値は`HS256`と`RS256`です。RS256を選択すると、トークンはテナントの秘密鍵で署名されます。署名アルゴリズムの詳細については、「[署名アルゴリズム](/docs/ja-jp/get-started/applications/signing-algorithms)」を参照してください。

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

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

#### 署名アルゴリズム

APIを作成する際には、トークンの署名に使用するアルゴリズムを選択する必要があります。署名は、<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>の送信者が自称のとおりであることを検証し、メッセージが途中で変更されていないことを保証するために使用されます。

<Callout icon="file-lines" color="#0EA5E9" iconType="regular">
  署名はJWTの一部です。JWTの構造に慣れていない場合は、「[JSON Web Tokenの構造](/docs/ja-jp/secure/tokens/json-web-tokens/json-web-token-structure)」を参照してください。
</Callout>

署名部分を作成するには、エンコードされたヘッダー、エンコードされたペイロード、シークレット、ヘッダーで指定されたアルゴリズムを使用して、それに署名します。APIに選択するのは、JWTヘッダーに含まれている`HS256`または `RS256`のアルゴリズムです。

* **RS256** は[非対称アルゴリズム](https://en.wikipedia.org/wiki/Public-key_cryptography)で、鍵には公開鍵と秘密鍵の2つがあります。Auth0は秘密鍵を保持して署名を生成し、JWTコンシューマーは公開鍵を保持して署名を検証します。
* **HS256** は[対称アルゴリズム](https://en.wikipedia.org/wiki/Symmetric-key_algorithm)で、1つの秘密鍵が暗号化する側と復号化する側で共有されます。同じ鍵が署名の生成と検証の両方に使用されます。鍵が侵害されないように、細心の注意を払う必要があります。

**RS256** の使用が最も安全で推奨されます。それには以下のような理由があります。

* RS256では、秘密鍵の所有者（Auth0）のみがトークンに署名できる一方、誰でも公開鍵を使ってトークンの有効性を確認できます。
* HS256では、秘密鍵が侵害されると、新しいシークレットでAPIをデプロイし直す必要があります。RS256では、複数のオーディエンスに有効なトークンを要求できます。
* RS256では、新しいシークレットを使ってAPIをデプロイし直すことなく、鍵のローテーションを実装できます。

<Callout icon="file-lines" color="#0EA5E9" iconType="regular">
  JWTの署名アルゴリズムについて詳しくは、「[JSON Web Token（JWT）の署名アルゴリズムの概要](https://auth0.com/blog/json-web-token-signing-algorithms-overview/)」を参照してください。
</Callout>

### アクセス許可を構成する

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

APIの設定で、**［Permissions（アクセス許可）］** タブに移動します。このセクションでは、以前に説明した4つのスコープ（`read:timesheets`、`create:timesheets`、`delete:timesheets`、`approve:timesheets`）すべてを追加することができます。

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

## アプリケーションを作成する

Autho0には、**ネイティブアプリ** （モバイルアプリまたはデスクトップアプリで使用）、**シングルページWebアプリ** 、**通常のWebアプリ** 、**マシンツーマシンアプリ** （CLI、デーモン、またはバックエンドで実行中のサービスで使用）の4つのタイプのアプリケーションがあります。このシナリオでは、モバイルアプリケーション用に新しいアプリケーションを作成するため、アプリケーションタイプに［Native （ネイティブ）］を選びます。

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

アプリケーションの名前を設定し（ここでは「`Timesheets Mobile`」とします）、タイプに`［Native App（ネイティブアプリ）］`を選択します。

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

## 認可拡張機能を構成する

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

### アクセス許可を定義する

すでに定義済みのスコープに関するアクセス許可を定義する必要があります。［Authorization Extension（認可拡張機能）］で［Permissions（アクセス許可）］タブをクリックし、**［Create Permission（アクセス許可の作成）］** ボタンをクリックします。ダイアログで、各アクセス許可の詳細を指定します。アクセス許可の名前が、対応するスコープと完全に同一であることを確認します。

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

### ロールを定義する

［Roles（ロール）］タブに移動し、2つのロールを作成します。**［Create Role（ロールの作成）］** ボタンをクリックし、**［Timesheets SPA（タイムシートSPA）］** アプリケーションを選択します。ロールに「Employee（従業員）」という名前と説明を付けて、`delete:timesheets`、`create:timesheets`と`read:timesheets`のアクセス許可を選択します。**［Save (保存)］** をクリックします。

次に、同じ手順で「**Manager（マネージャー）** 」ロールを作成し、すべてのアクセス許可が選択されていることを確認します。

<Frame>
  <img src="https://mintcdn.com/docs-dev-actions-triggers-prototype/lj4yKtFBkRd_2GRB/docs/images/ja-jp/cdy7uua7fh8z/3ver0yyJpTLypmcIDzwSNt/d880e8ae74e6e973c7ce1c8b0f7e7c87/create-manager-role.png?fit=max&auto=format&n=lj4yKtFBkRd_2GRB&q=85&s=60308b88e4869d9c1da6a8579c39f42c" alt="Dashboard - Extensions - Authorization Extension - Create Manager Role" width="2624" height="2024" data-path="docs/images/ja-jp/cdy7uua7fh8z/3ver0yyJpTLypmcIDzwSNt/d880e8ae74e6e973c7ce1c8b0f7e7c87/create-manager-role.png" />
</Frame>

### ユーザーをロールに割り当てる

すべてのユーザーを「Manager （マネージャー）」または「User（ユーザー）」ロールに割り当てる必要があります。［Authorization Extension（認可拡張機能）］の［Users（ユーザー）］タブに移動し、ユーザーを選択します。ユーザー情報画面で、［Roles（ロール）］タブに移動します。**［Add Role to User（ユーザーにロールを追加）］** ボタンをクリックし、ユーザーに適切なロールを選択することで、ユーザーにロールを追加することができます。

### 認可拡張機能を構成する

また、認可拡張機能に関するルールが公開されていることも確認する必要があります。これを実行するには、［Authorization Extension（認可拡張機能）］の右上にあるユーザーアバターをクリックして、**［Configuration（構成）］** オプションを選択します。

**［Permissions（アクセス許可）］** が有効になっていることを確認してから、**［Publish Rule（ルールの公開）］** ボタンをクリックします。

### トークンのスコープを検証するルールを作成する

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

<Tooltip data-tooltip-id="react-containers-DefinitionTooltip-0" href="/docs/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/glossary?term=access-token" tip="アクセストークン: APIへのアクセスに使用される、不透明な文字列またはJWT形式の認可資格情報。" cta="用語集の表示">Access Token</Tooltip> Scopes（アクセストークンスのコープ）**」のような名前を付けて、そのルールに次のコードを指定することができます。

```javascript lines theme={null}
function (user, context, callback) {
  if (context.clientName !== 'Timesheets SPA') {
    return callback(null, user, context);
  }

  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;
  });
  Array.prototype.push.apply(filteredScopes, permissions);
  context.accessToken.scope = filteredScopes.join(' ');

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

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

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

前のチュートリアル [1.ソリューションの概要](/docs/ja-jp/get-started/architecture-scenarios/mobile-api/part-1)

次のチュートリアル [3.API + モバイルの実装](/docs/ja-jp/get-started/architecture-scenarios/mobile-api/api-implementation-nodejs)
