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

> モバイルアプリ + API アーキテクチャ シナリオ向けの Auth0 設定

# Auth0 設定（モバイルアプリ + API）

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

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

左側の [APIs メニュー](https://manage.auth0.com/#/apis) をクリックし、**Create API** ボタンをクリックします。

API について、次の情報を入力する必要があります。

* **Name**: API の表示名です。機能には影響しません。
* **Identifier**: API の一意の識別子です。URL を使用することをおすすめしますが、公開されている URL である必要はありません。Auth0 がこの API を呼び出すことはありません。この値は後から変更できません。
* **<Tooltip tip="Signing Algorithm: トークンが改ざんされていないことを保証するために、トークンに電子署名する際に使用されるアルゴリズムです。" cta="用語集を見る" href="/docs/ja-jp/glossary?term=Signing+Algorithm">署名アルゴリズム</Tooltip>**: トークンの署名に使用するアルゴリズムです。指定できる値は `HS256` と `RS256` です。RS256 を選択すると、トークンはテナントの秘密鍵で署名されます。署名アルゴリズムの詳細については、[Signing Algorithms](/docs/ja-jp/get-started/applications/signing-algorithms) を参照してください。

<Frame>
  <img src="https://mintcdn.com/translations/pvjQqAy3EB2TK6NP/docs/images/cdy7uua7fh8z/4kIH4BQc4vDel2zhJ6lwCE/094cff6e8e1788c39796eb28ab1925ca/2024-06-27_14-50-24.png?fit=max&auto=format&n=pvjQqAy3EB2TK6NP&q=85&s=ba2b5abee5018b4b55bd3e136e6673ac" alt="Dashboard - Applications - APIs - Create API - Popup" width="624" height="736" data-path="docs/images/cdy7uua7fh8z/4kIH4BQc4vDel2zhJ6lwCE/094cff6e8e1788c39796eb28ab1925ca/2024-06-27_14-50-24.png" />
</Frame>

必要な情報を入力し、**Create** ボタンをクリックします。

<div id="signing-algorithms">
  #### 署名アルゴリズム
</div>

API を作成する際は、トークンの署名に使用するアルゴリズムを選択する必要があります。署名は、<Tooltip tip="JSON Web Token (JWT): 2者間でクレームを安全に表現するために使用される標準的な ID Token 形式（多くの場合、アクセストークン形式としても使用されます）。" cta="用語集を見る" href="/docs/ja-jp/glossary?term=JWT">JWT</Tooltip> の送信者が本人であることを検証し、メッセージが途中で改ざんされていないことを保証するために使用されます。

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

署名部分を作成するには、エンコードされたヘッダー、エンコードされたペイロード、シークレット、およびヘッダーで指定されたアルゴリズムを使って署名する必要があります。JWT ヘッダーの一部であるこのアルゴリズムが、API に対して選択する `HS256` または `RS256` です。

* **RS256** は[非対称アルゴリズム](https://en.wikipedia.org/wiki/Public-key_cryptography)です。つまり、公開鍵と秘密鍵 (シークレット) の 2 つの鍵があります。Auth0 は署名の生成に使用する秘密鍵を保持し、JWT の利用者は署名の検証に使用する公開鍵を保持します。
* **HS256** は[対称アルゴリズム](https://en.wikipedia.org/wiki/Symmetric-key_algorithm)です。つまり、2者間で共有されるシークレット鍵が 1 つだけあります。同じ鍵が署名の生成と検証の両方に使用されます。そのため、鍵の機密性を保つには特に注意が必要です。

最も安全で、かつ推奨される方法は **RS256** を使用することです。理由の一部は次のとおりです。

* RS256 では、秘密鍵の保持者 (Auth0) のみがトークンに署名でき、公開鍵を使えば誰でもそのトークンが有効かどうかを確認できます。
* HS256 では、秘密鍵が漏えいした場合、新しいシークレットを使って API を再デプロイする必要があります。RS256 では、複数のオーディエンスに対して有効なトークンを要求できます。
* RS256 では、新しいシークレットを使って API を再デプロイしなくても、鍵のローテーションを実装できます。

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

<div id="configure-the-permissions">
  ### 権限を設定する
</div>

アプリケーションを作成したら、認可時にアプリケーションが要求できる権限を設定する必要があります。

API の設定画面で、**Permissions** タブを開きます。このセクションでは、前述した 4 つのスコープ、`read:timesheets`、`create:timesheets`、`delete:timesheets`、`approve:timesheets` をすべて追加できます。

<Frame>
  <img src="https://mintcdn.com/translations/xwVvTWJUElMm5YAK/docs/images/cdy7uua7fh8z/xxMOKezob6gNHJ0CcKhcg/ccbb9bbab29576a96ed8425329ecffb4/dashboard-apis-edit_view-permissions.png?fit=max&auto=format&n=xwVvTWJUElMm5YAK&q=85&s=b9f2abf9032519ff3382e45a2f73596b" alt="ダッシュボード - Applications - APIs - Permissions" width="1260" height="784" data-path="docs/images/cdy7uua7fh8z/xxMOKezob6gNHJ0CcKhcg/ccbb9bbab29576a96ed8425329ecffb4/dashboard-apis-edit_view-permissions.png" />
</Frame>

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

Auth0 には 4 種類のアプリケーションがあります。**Native App** (モバイルアプリやデスクトップアプリで使用) 、**Single-Page Web App**、**Regular Web App**、そして **Machine to Machine App** (CLI、デーモン、またはバックエンドで実行されるサービスで使用) です。今回のシナリオでは、モバイルアプリケーション用の新しいアプリケーションを作成するため、アプリケーションタイプとして Native を使用します。

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

アプリケーション名を設定し (ここでは `Timesheets Mobile` を使用します) 、タイプとして `Native App` を選択します。

**Create** をクリックします。

<div id="configure-the-authorization-extension">
  ## Authorization Extension を設定する
</div>

お使いのテナントに Authorization Extension がインストールされていることを確認してください。手順の詳細については、[Authorization Extension のドキュメント](/docs/ja-jp/customize/extensions/authorization-extension)を参照してください。

<div id="define-permissions">
  ### 権限を定義する
</div>

すでに定義したスコープに対応する権限を定義する必要があります。Authorization Extension で `Permissions` タブをクリックし、**Create Permission** ボタンをクリックします。表示されたダイアログで、各権限の詳細を入力します。権限名は、対応するスコープ名と完全に一致している必要があります。

同様に、残りのすべてのスコープについても権限を作成します。

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

**Roles** タブに移動し、2 つのロールを作成します。**Create Role** ボタンをクリックして、**Timesheets SPA** アプリケーションを選択します。ロールの名前と説明に Employee を設定し、`delete:timesheets`、`create:timesheets`、`read:timesheets` の権限を選択します。**Save** をクリックします。

次に、同じ手順で **Manager** ロールを作成し、すべての権限が選択されていることを確認します。

<Frame>
  <img src="https://mintcdn.com/translations/3nS3prIggmJG9TUI/docs/images/cdy7uua7fh8z/3ver0yyJpTLypmcIDzwSNt/d880e8ae74e6e973c7ce1c8b0f7e7c87/create-manager-role.png?fit=max&auto=format&n=3nS3prIggmJG9TUI&q=85&s=358c25585d11bdd92b059d30edd235af" alt="ダッシュボード - Extensions - Authorization Extension - Manager ロールの作成" width="2624" height="2024" data-path="docs/images/cdy7uua7fh8z/3ver0yyJpTLypmcIDzwSNt/d880e8ae74e6e973c7ce1c8b0f7e7c87/create-manager-role.png" />
</Frame>

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

すべてのユーザーを、Manager または User のいずれかのロールに割り当てる必要があります。これを行うには、Authorization Extension の Users タブを開いてユーザーを選択します。ユーザー情報画面で Roles タブを開きます。 **Add Role to User** ボタンをクリックし、そのユーザーに適したロールを選択すると、ユーザーにロールを追加できます。

<div id="configuring-the-authorization-extension">
  ### Authorization Extension の設定
</div>

Authorization Extension の Rule が公開済みであることも確認してください。これを行うには、Authorization Extension の右上にあるユーザーアバターをクリックし、**Configuration** オプションを選択します。

**Permissions** を有効にしてから、**Publish Rule** ボタンをクリックします。

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

このプロセスの最後の手順では、<Tooltip tip="Access Token: Authorization credential, in the form of an opaque string or JWT, used to access an API." cta="用語集を見る" href="/docs/ja-jp/glossary?term=Access+Token">アクセストークン</Tooltip>に含まれるスコープが、ユーザーに割り当てられた権限に基づいて有効かどうかを検証する Rule を作成します。ユーザーに対して無効なスコープは、アクセストークンから削除する必要があります。

<Tooltip tip="Auth0 Dashboard: Auth0's main product to configure your services." cta="用語集を見る" href="/docs/ja-jp/glossary?term=Auth0+Dashboard">Auth0 Dashboard</Tooltip>で Rules タブに移動します。Authorization Extension によって作成された Rule が表示されるはずです。

**Create Rule** ボタンをクリックし、**Empty Rule** テンプレートを選択します。Rule には、たとえば **Access Token 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);
}
```

上記のコードにより、すべてのAccess Tokenには、ユーザーのpermissionsに基づいて有効な、適切な形式のスコープ (例：`action:area` や `delete:timesheets`) のみが含まれるようになります。完了したら、**Save** ボタンをクリックします。

Rules は Rules ページに表示されている順に実行されるため、新しく作成したルールが Authorization Extension のルールより下に配置され、Authorization Extension のルールの後に実行されるようにしてください。

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

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