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

# Universal Portals用のアプリケーションを構成する

> Universal Portals用に通常のWebアプリケーションを構成します。推奨設定、APIアクセス、リフレッシュトークンの設定についても説明します。

> [!WARNING]
>
> **Auth0 Universal Portals機能は現在、です。**

各ポータルには、Auth0の[通常のWebアプリケーション](https://auth0.com/docs/ja-jp/get-started/auth0-overview/create-applications/regular-web-apps.md)が1つずつ紐づいています。ポータルサーバーは、このアプリケーションの認証情報を使ってユーザーをサインインさせ、[My Account API](https://auth0.com/docs/ja-jp/manage-users/my-account-api.md)と[My Organization API](https://auth0.com/docs/ja-jp/manage-users/my-organization-api.md)のアクセストークンを取得します。アプリケーションとポータルは1対1で対応します。

[Universal Portalsクイックスタート](https://auth0.com/docs/ja-jp/customize/portals/quickstart.md)を使うと、通常のWebアプリケーションが自動で作成・設定されます。既存のアプリケーションをリンクしたい場合、設定をコードとして管理したい場合、または設定内容を確認したい場合は、このページを参照してください。

```mermaid theme={null}
flowchart LR
    portal["ポータル"] --- app["通常のWebアプリケーション<br/>（ポータルごとに1つ）"]
    app -- "Client grant and<br/>refresh token policy" --> myaccount["My Account API"]
    app -- "Client grant and<br/>refresh token policy" --> myorg["My Organization API"]
```

## シナリオ別の要件

| シナリオ | 要件 |
| - | - |
| コンシューマーポータル | My Account APIのスコープによるMy Account APIへのアクセス |
| ビジネスポータル | My Organization APIのスコープによるMy Organization APIへのアクセス、および[Organizationコンテキスト](#organization-context)の設定 |
| ネイティブアプリケーション | アプリケーションがセッション転送トークンを受け付けること。[ネイティブアプリケーション](#native-application)を参照してください |
| ユーザーを更新するForm | Forms vault専用のマシンツーマシンアプリケーション。[ユーザーを更新するForm](#forms-that-update-users)を参照してください |

ポータルが呼び出す各リソースサーバー (My Account APIとMy Organization API) には、次の2つが必要です。

* クライアントへの認可：アプリケーションがスコープをリクエストできるようにします。
* リフレッシュトークンポリシー：ポータルサーバーがリフレッシュトークン (リフレッシュトークン：新しいアクセストークンの取得に使用できる特殊なトークンです。ユーザーに再ログインを求めることなく、有効期限が近づいたアクセストークンを更新するのに役立ちます。)を、そのリソースサーバー用のアクセストークンと交換できるようにします。

いずれかが欠けていると、[コンポーネント](https://auth0.com/docs/ja-jp/customize/portals/portal-components.md)がAPIエラーで失敗します。詳細については、「[Multi-Resource Refresh Token](https://auth0.com/docs/ja-jp/secure/tokens/refresh-tokens/multi-resource-refresh-token.md)」をお読みください。

付与すべきスコープは、ポータルで使用するコンポーネントによって異なります。以下のリストには、サポート対象のコンポーネントに必要なスコープがすべて記載されています。使用しないコンポーネントのスコープは削除してください。各コンポーネントのスコープについては、「[Portal Components Library Reference](https://auth0.com/docs/ja-jp/customize/portals/portal-components.md)」をお読みください。

> [accordion] My Account APIのスコープ
>
> オーディエンス：`https://YOUR_DOMAIN/me/`
>
> * `read:me:factors`
> * `read:me:authentication_methods`
> * `create:me:authentication_methods`
> * `delete:me:authentication_methods`

> [accordion] My Organization APIのスコープ
>
> オーディエンス：`https://YOUR_DOMAIN/my-org/`
>
> * `read:my_org:details`
> * `update:my_org:details`
> * `read:my_org:configuration`
> * `read:my_org:domains`
> * `create:my_org:domains`
> * `update:my_org:domains`
> * `delete:my_org:domains`
> * `read:my_org:identity_providers`
> * `create:my_org:identity_providers_domains`
> * `delete:my_org:identity_providers_domains`

## 推奨設定

ポータルアプリケーションには、以下の設定を使用してください。リフレッシュトークンの有効期間はポータルのセッションに合わせて、無操作時は1時間、合計で1日としています。スコープは Portal で使用するコンポーネントに必要なものだけを付与し、Portal が呼び出さないリソースサーバーについては、そのポリシーとグラントを削除してください。

> [tab] Auth0 Dashboard
>
> **1. アプリケーションを作成する**
>
> [**Auth0 Dashboard > Integration > Applications**](https://manage.auth0.com/dashboard/#/applications/list)に移動して**Create Application**を選択し、**Regular Web Applications**を選んで名前を入力します。
>
> **2. URLを設定する**
>
> **Settings**タブで、**Allowed Callback URLs**に`https://YOUR_DOMAIN/portals/auth/callback`を設定します。**Allowed Logout URLs**には、アプリケーションのURLを設定します。これは、ユーザーがPortalからログアウトした後に移動する先です。
>
> **3. トークンエンドポイントのIPヘッダーを信頼する**
>
> **Credentials**タブの**Advanced**で、**Trust token endpoint IP header**を有効にします。
>
> **4. グラントタイプを設定する**
>
> **Advanced Settings > Grant Types**で、**Authorization Code**、**Refresh Token**、**MFA**を有効にします。その他のグラントタイプはすべて無効のままにしておきます。
>
> **5. リフレッシュトークンの有効期間を設定する**
>
> **Refresh Token Expiration**で**Set Idle Refresh Token Lifetime**を有効にし、3600秒と入力します。続いて**Set Maximum Refresh Token Lifetime**を有効にし、86400秒と入力します。リフレッシュトークンのローテーションは、デフォルトのまま無効にしておきます。
>
> **6. Organizationsを許可する**
>
> **Organizations**タブで、**Type of Users**を**Both**に、**Login Flow**を**No Prompt**に設定します。
>
> **7. APIアクセスを付与する**
>
> **API Access**タブで、My Account APIとMy Organization APIへのユーザーアクセスを認可します。その際、[シナリオ別の要件](#requirements-by-scenario)に記載されたスコープを指定してください。
>
> **8. Multi-Resource Refresh Tokenを有効にする**
>
> **Multi-Resource Refresh Token**で、同じAPIとスコープを有効にします。最後に**Save Changes**を選択します。

> [tab] Management API
>
> アプリケーションを作成します。ペイロードでは、新しい通常のWebアプリケーションのデフォルトとは異なる値と、両方のリソースサーバーのリフレッシュトークンポリシーを設定します。APIでは、`refresh_token`を送信する際には必ず`rotation_type`も指定する必要があります。
>
> ```bash wrap lines theme={null}
> curl --request POST \
>   --url "https://YOUR_DOMAIN/api/v2/clients" \
>   --header "authorization: Bearer {managementApiToken}" \
>   --header "content-type: application/json" \
>   --data '{
>     "name": "{portalName} (Universal Portals)",
>     "app_type": "regular_web",
>     "oidc_conformant": true,
>     "callbacks": ["https://YOUR_DOMAIN/portals/auth/callback"],
>     "allowed_logout_urls": ["{yourApplicationUrl}"],
>     "grant_types": [
>       "authorization_code",
>       "refresh_token",
>       "http://auth0.com/oauth/grant-type/mfa-oob",
>       "http://auth0.com/oauth/grant-type/mfa-otp",
>       "http://auth0.com/oauth/grant-type/mfa-recovery-code"
>     ],
>     "token_endpoint_auth_method": "client_secret_post",
>     "is_token_endpoint_ip_header_trusted": true,
>     "organization_usage": "allow",
>     "refresh_token": {
>       "rotation_type": "non-rotating",
>       "expiration_type": "expiring",
>       "token_lifetime": 86400,
>       "idle_token_lifetime": 3600,
>       "policies": [
>         {
>           "audience": "https://YOUR_DOMAIN/me/",
>           "scope": [
>             "read:me:factors",
>             "read:me:authentication_methods",
>             "create:me:authentication_methods",
>             "delete:me:authentication_methods"
>           ]
>         },
>         {
>           "audience": "https://YOUR_DOMAIN/my-org/",
>           "scope": [
>             "read:my_org:details",
>             "update:my_org:details",
>             "read:my_org:configuration",
>             "read:my_org:domains",
>             "create:my_org:domains",
>             "update:my_org:domains",
>             "delete:my_org:domains",
>             "read:my_org:identity_providers",
>             "create:my_org:identity_providers_domains",
>             "delete:my_org:identity_providers_domains"
>           ]
>         }
>       ]
>     }
>   }'
> ```
>
> 次に、リソースサーバーごとにクライアントへの認可を作成します。以下の例では、My Account APIへのアクセスを許可しています。オーディエンスを`https://YOUR_DOMAIN/my-org/`に、スコープをMy Organization APIのものに置き換えて、同じ手順を繰り返してください。
>
> ```bash wrap lines theme={null}
> curl --request POST \
>   --url "https://YOUR_DOMAIN/api/v2/client-grants" \
>   --header "authorization: Bearer {managementApiToken}" \
>   --header "content-type: application/json" \
>   --data '{
>     "client_id": "{portalClientId}",
>     "audience": "https://YOUR_DOMAIN/me/",
>     "subject_type": "user",
>     "scope": [
>       "read:me:factors",
>       "read:me:authentication_methods",
>       "create:me:authentication_methods",
>       "delete:me:authentication_methods"
>     ]
>   }'
> ```

## 変更してはいけない設定

これらの設定はPortalの動作に関わるため、変更しないでください。

> [!WARNING]
>
> その他のアプリケーション設定もPortalの動作に影響する場合があります。変更を加える際は、必ず先に開発用テナントでテストしてください。

* **DPoPを有効にしないでください。** Portalサーバーは機密クライアントであり、sender-constrainedトークンを使用しません。
* **リフレッシュトークンのローテーションを有効にしないでください。** Portalはこの機能に対応していません。
* **複数のPortalで1つのアプリケーションを共有しないでください。** Portalごとに専用のアプリケーションが必要です。
* **リフレッシュトークンの無操作有効期間を1時間未満に設定しないでください。** Portalのセッションは、無操作状態が1時間続くと終了します。リフレッシュトークンの有効期間がこれより短いと、Portalがユーザーに再サインインを求める前にAPI呼び出しが失敗してしまいます。
* **Portalで使用しないグラントタイプやスコープを追加しないでください。** たとえば、`client_credentials`グラントは有効にしないでください。
* **PortalアプリケーションにManagement APIグラントを追加しないでください。** ユーザーを更新するFormには、別途マシンツーマシンアプリケーションを使用してください。

## シナリオ別の設定

ユースケースによっては、ポータルアプリケーションに追加の設定が必要です。このセクションのシナリオを確認し、ユーザーがポータルにアクセスする方法に応じた設定を適用してください。

### ネイティブアプリケーション

ネイティブアプリケーションからポータルを開くには、URLで渡される[セッション転送トークン](https://auth0.com/docs/ja-jp/authenticate/single-sign-on/native-to-web/configure-implement-native-to-web.md#create-and-manage-session-transfer-tokens)をポータルアプリケーションが受け入れられるようにする必要があります。ポータルアプリケーションに以下を追加してください。

```json wrap lines theme={null}
{
  "session_transfer": {
    "allowed_authentication_methods": ["query"],
    "enforce_device_binding": "ip"
  }
}
```

セッション転送トークンを作成するように、ネイティブアプリケーションを構成します。詳しくは、[ネイティブからWebへのSSOを構成・実装する](https://auth0.com/docs/ja-jp/authenticate/single-sign-on/native-to-web/configure-implement-native-to-web.md)を参照してください。その後、[ポータルにアクセスする](https://auth0.com/docs/ja-jp/customize/portals/access-portals.md#open-a-portal-from-a-native-application)の手順に従ってください。

### Organization コンテキスト

`organization` パラメーターを指定してポータルを開くには、ポータルアプリケーションで [Organizations](https://auth0.com/docs/ja-jp/manage-users/organizations.md) を許可しておく必要があります：

```json wrap lines theme={null}
{
  "organization_usage": "allow"
}
```

推奨設定にはこの値がすでに含まれており、ログインフローはデフォルトで `no_prompt` になっています。この設定では、ビジネス向けの Portal を開く際に必ず `organization` を送信してください。詳しくは、[組織の動作を定義する](https://auth0.com/docs/ja-jp/manage-users/organizations/configure-organizations/define-organization-behavior.md)および[Portal にアクセスする](https://auth0.com/docs/ja-jp/customize/portals/access-portals.md#open-a-portal-in-an-organization-context)をご覧ください。

### ユーザーを更新するForm

[フロー](https://auth0.com/docs/ja-jp/customize/forms/flows.md)でユーザーを更新するFormは、[Forms vault](https://auth0.com/docs/ja-jp/customize/forms/vaults.md)接続を介してManagement APIを呼び出します。この接続には専用のマシンツーマシンアプリケーションを作成し、`update:users`や`update:users_app_metadata`など、フローに必要なスコープだけを付与してください。詳しくは、[Auth0 Vault接続](https://auth0.com/docs/ja-jp/customize/forms/vaults/auth0.md)を参照してください。

## アプリケーションをPortalにリンクする

> [tab] Auth0 Dashboard
>
> 1. [**Auth0 Dashboard > Portals**](https://manage.auth0.com/dashboard/#/universal-portals)に移動して**Create Portal**を選択するか、既存のPortalを開きます。
> 2. **Name**と**Slug**を入力し、アプリケーションを選択します。スラッグはポータルURLの一部として使用されます。
> 3. **Create**を選択します。

> [tab] Management API
>
> ```bash wrap lines theme={null}
> curl --request POST \
>   --url "https://YOUR_DOMAIN/api/v2/portals" \
>   --header "authorization: Bearer {managementApiToken}" \
>   --header "content-type: application/json" \
>   --data '{
>     "name": "{portalName}",
>     "slug": "{slug}",
>     "client": {
>       "token_endpoint_auth_method": "client_secret_post",
>       "client_id": "{portalClientId}",
>       "client_secret": "{portalClientSecret}"
>     }
>   }'
> ```
>
> `client_secret`は書き込み専用で、Auth0から返されることはありません。ポータルAPIでサポートされているのは`client_secret_post`のみです。`slug`が重複している場合は`409 Conflict`が返されます。

## 有効な接続を確認する

ユーザーは、ポータルアプリケーションで有効になっている任意の接続を使ってPortalにサインインできます。Portalを共有する前に、ユーザーが必要とする接続が少なくとも1つ有効になっていることを確認してください。

1. [**Auth0 Dashboard > アプリケーション**](https://manage.auth0.com/dashboard/#/applications/list)に移動し、ポータルアプリケーションを選択します。
2. **［接続］**タブを選択します。
3. ユーザーが必要とする接続をオンにします。有効な接続が1つもない場合、ユーザーはPortalにサインインできません。

詳細については、「[アプリケーション接続を更新する](https://auth0.com/docs/ja-jp/get-started/applications/update-application-connections.md)」をお読みください。

**［Enable Application Connections］**テナント設定がオンの場合、クイックスタートで作成される接続を含め、テナントに現在あるすべての接続がポータルアプリケーションに割り当てられます。詳細については、「[テナント設定](https://auth0.com/docs/ja-jp/get-started/tenant-settings#advanced)」をお読みください。

## 設定を確認する

`https://YOUR_DOMAIN/portals/{slug}` を開き、テストユーザーでサインインします。次に、Universal Component を含むページを開きます。コンポーネントにエラーが表示される場合は、[Universal Portals のトラブルシューティング](https://auth0.com/docs/ja-jp/customize/portals/troubleshoot-portals.md)を参照してください。

## 次のステップ

> [card] [Universal Portalsのトラブルシューティング](https://auth0.com/docs/ja-jp/customize/portals/troubleshoot-portals.md)
>
> APIエラー、サインインの問題、Organizationに関する問題を解決します。

> [card] [Portalsへのアクセス](https://auth0.com/docs/ja-jp/customize/portals/access-portals.md)
>
> アプリケーションからPortalへユーザーを誘導します。
