> ## Documentation Index
> Fetch the complete documentation index at: https://docs-staging-feat-init-gt-translations.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

> Server + API アーキテクチャ シナリオ向けの Auth0 設定

# Auth0 設定（Server Apps + API）

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

<h2 id="configure-the-api">
  API を設定する
</h2>

API を保護するには、<Tooltip tip="Auth0 Dashboard: サービスを設定するための Auth0 の主要な製品です。" cta="用語集を表示" href="/docs/ja-jp/glossary?term=Auth0+Dashboard">Auth0 Dashboard</Tooltip> で API を登録する必要があります。Timesheets API を設定するには、[Register APIs](/docs/ja-jp/get-started/auth0-overview/set-up-apis) の手順に従ってください。

<h3 id="json-web-token-profile">
  JSON Web Token プロファイル
</h3>

<Tooltip tip="アクセストークン: API へのアクセスに使用される認可資格情報で、不透明な文字列または JWT の形式を取ります。" cta="用語集を見る" href="/docs/ja-jp/glossary?term=OAuth+2.0">OAuth 2.0</Tooltip> では、<Tooltip tip="OAuth 2.0: 認可プロトコルとワークフローを定義する認可フレームワークです。" cta="用語集を見る" href="/docs/ja-jp/glossary?term=access+token">アクセストークン</Tooltip>のプロファイル (方言) を定義しています。Auth0 は次の 2 種類のプロファイルをサポートしています。

* Auth0 トークンプロファイル
* RFC 9068 プロファイル

デフォルトは Auth0 プロファイルです。この 2 つのプロファイルの主な違いは、クレーム名です。Auth0 プロファイルでは、`client_id` ではなく `azp` を使用します。違いの詳細については、[アクセストークンプロファイル](/docs/ja-jp/secure/tokens/access-tokens/access-token-profiles) を参照してください。

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

API を作成するときは、トークンの署名に使用するアルゴリズムを選択する必要があります。署名は、<Tooltip tip="JSON Web Token (JWT): 2 者間で claim を安全にやり取りするために使用される標準的な ID トークン形式（多くの場合、アクセストークン形式としても使用）。" 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,` または `PS256`。

最も安全な方法であり、私たちが推奨するのは、**RS256** を使用することです。理由としては、次のようなものがあります。

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

<h2 id="configure-the-scopes">
  スコープを設定する
</h2>

API の設定で、認可時にアプリケーションが要求できるスコープを設定する必要があります。`Permissions` タブに移動してください。

このセクションでは、前述した 4 つのスコープ `batch:upload`、`read:timesheets`、`create:timesheets`、`delete:timesheets`、`approve:timesheets` をすべて追加できます。さらに、追加のスコープとして `batch:upload` も追加します。

<Callout icon="file-lines" color="#0EA5E9" iconType="regular">
  このドキュメントでは、cron ジョブに必要なのは `batch:upload` スコープのみであるため、これだけを扱います。ただし、今後のアプリケーションで必要になるスコープも、完全を期すために追加しています。
</Callout>

<Frame>
  <img src="https://mintcdn.com/docs-staging-feat-init-gt-translations/Z7xMzrN9GfTmJzgq/docs/images/cdy7uua7fh8z/73FeuGyODcu3q7PKjLaQOO/63d8d20e9249e751152b4530005f4c71/Timesheets_API_-_Permissions_-_English.png?fit=max&auto=format&n=Z7xMzrN9GfTmJzgq&q=85&s=6f4a744287449b45833712d95188f09c" alt="ダッシュボード > APIs > 権限" data-og-width="1052" width="1052" data-og-height="916" height="916" data-path="docs/images/cdy7uua7fh8z/73FeuGyODcu3q7PKjLaQOO/63d8d20e9249e751152b4530005f4c71/Timesheets_API_-_Permissions_-_English.png" data-optimize="true" data-opv="3" srcset="https://mintcdn.com/docs-staging-feat-init-gt-translations/Z7xMzrN9GfTmJzgq/docs/images/cdy7uua7fh8z/73FeuGyODcu3q7PKjLaQOO/63d8d20e9249e751152b4530005f4c71/Timesheets_API_-_Permissions_-_English.png?w=280&fit=max&auto=format&n=Z7xMzrN9GfTmJzgq&q=85&s=988c03372fa52f6bbfe11065db7bd9c3 280w, https://mintcdn.com/docs-staging-feat-init-gt-translations/Z7xMzrN9GfTmJzgq/docs/images/cdy7uua7fh8z/73FeuGyODcu3q7PKjLaQOO/63d8d20e9249e751152b4530005f4c71/Timesheets_API_-_Permissions_-_English.png?w=560&fit=max&auto=format&n=Z7xMzrN9GfTmJzgq&q=85&s=c908ff3890d5ef38bf1cc7731061f7c5 560w, https://mintcdn.com/docs-staging-feat-init-gt-translations/Z7xMzrN9GfTmJzgq/docs/images/cdy7uua7fh8z/73FeuGyODcu3q7PKjLaQOO/63d8d20e9249e751152b4530005f4c71/Timesheets_API_-_Permissions_-_English.png?w=840&fit=max&auto=format&n=Z7xMzrN9GfTmJzgq&q=85&s=6be10e862d1bf511b57433e7172cd803 840w, https://mintcdn.com/docs-staging-feat-init-gt-translations/Z7xMzrN9GfTmJzgq/docs/images/cdy7uua7fh8z/73FeuGyODcu3q7PKjLaQOO/63d8d20e9249e751152b4530005f4c71/Timesheets_API_-_Permissions_-_English.png?w=1100&fit=max&auto=format&n=Z7xMzrN9GfTmJzgq&q=85&s=459a1a69c2157606311d02754c4086c6 1100w, https://mintcdn.com/docs-staging-feat-init-gt-translations/Z7xMzrN9GfTmJzgq/docs/images/cdy7uua7fh8z/73FeuGyODcu3q7PKjLaQOO/63d8d20e9249e751152b4530005f4c71/Timesheets_API_-_Permissions_-_English.png?w=1650&fit=max&auto=format&n=Z7xMzrN9GfTmJzgq&q=85&s=2a5cf5a5e3383c0258dd43dbede8c8a2 1650w, https://mintcdn.com/docs-staging-feat-init-gt-translations/Z7xMzrN9GfTmJzgq/docs/images/cdy7uua7fh8z/73FeuGyODcu3q7PKjLaQOO/63d8d20e9249e751152b4530005f4c71/Timesheets_API_-_Permissions_-_English.png?w=2500&fit=max&auto=format&n=Z7xMzrN9GfTmJzgq&q=85&s=67292524b7c05c9ded1c859ae2d51f3e 2500w" />
</Frame>

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

Auth0 Dashboard で API を作成すると、その API 用のテストアプリケーションが自動的に生成されます。Auth0 Dashboard で [Application Section](https://manage.auth0.com/#/applications) に移動すると、Timesheets API のテストアプリケーションが表示されます。

<Frame>
  <img src="https://mintcdn.com/docs-staging-feat-init-gt-translations/lFCCXa5dVspGIuTF/docs/images/cdy7uua7fh8z/7lnuzFgs3IuWyL4bK5aVZV/05abca8035c011bf018b27e31f77a055/2024-06-28_17-13-34.png?fit=max&auto=format&n=lFCCXa5dVspGIuTF&q=85&s=4a430c4b1dbb2e19bd980507fb9d61d4" alt="undefined" width="1552" height="760" data-path="docs/images/cdy7uua7fh8z/7lnuzFgs3IuWyL4bK5aVZV/05abca8035c011bf018b27e31f77a055/2024-06-28_17-13-34.png" />
</Frame>

末尾のメニューオプションを選択して、アプリケーションの設定を開きます。アプリケーション名を `Timesheets Import Job` に変更します。

cron ジョブには、Machine-to-Machine Application が必要です。API の作成時に生成されたテストアプリケーションは、自動的に Machine-to-Machine Application として設定されています。

<h2 id="configure-applications-access-to-the-api">
  アプリケーションの API へのアクセスを設定する
</h2>

最後に、アプリケーションが Timesheets API にアクセスできるようにする必要があります。API の設定画面に戻り、Machine to Machine Application タブを選択してください。

一覧に **Timesheets Import Job** アプリケーションが表示され、アプリケーション名の右側にあるスイッチが `Authorized` になっていれば、API へのアクセスが許可されていることが確認できます。アプリケーションが認可されていない場合は、スイッチを `Unauthorized` から `Authorized` に切り替えてください。

また、アプリケーションが Auth0 で認可される際に、そのアプリケーションに発行されるアクセストークンに含めるスコープも指定する必要があります。

右端の下向き矢印をクリックしてアプリケーションの設定を展開すると、利用可能なスコープの一覧が表示されます。この cron ジョブで必要なのは `batch:upload` スコープだけです。外部システム内の timesheet entry に基づいて新しい timesheet を作成するだけだからです。

`batch:upload` スコープを選択したら、**Update** ボタンをクリックして設定を保存します。

<Frame>
  <img src="https://mintcdn.com/docs-staging-feat-init-gt-translations/sDOAAkLQ2_fRrOaM/docs/images/cdy7uua7fh8z/3PjvkTaoOZKWCMJol4ajCu/b5df50d1b78f95f5a2a8f82e6bb39e42/2025-02-26_18-58-47.png?fit=max&auto=format&n=sDOAAkLQ2_fRrOaM&q=85&s=03c50328adb8f5892a46ae3f62028aa3" alt="Dashboard - Applications - APIs - Machine to Machine Applications - Authorize" width="898" height="1274" data-path="docs/images/cdy7uua7fh8z/3PjvkTaoOZKWCMJol4ajCu/b5df50d1b78f95f5a2a8f82e6bb39e42/2025-02-26_18-58-47.png" />
</Frame>

これでソリューションの設計と Auth0 側で必要な設定の説明が終わったので、実装に進むことができます。
