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

# ポータルへのアクセス

> Webアプリケーションやネイティブアプリケーションから、あるいはOrganizationのコンテキストで、ユーザーをユニバーサルポータルへ誘導します。

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

Auth0 Universal PortalにはそれぞれURLがあるため、アプリケーションにサインイン済みのユーザーは、ログインプロンプトを経由せずにPortalを開くことができます。

Portalsには、エントリーポイントとしていくつかの選択肢が用意されています。ユーザーエクスペリエンスに合ったエントリーポイントを選択してください。

```mermaid theme={null}
flowchart TD
    start("ユーザーはどこから利用を開始しますか？") --> web["ウェブアプリケーション"]
    start --> native["ネイティブアプリケーション"]
    web --> url["ポータルURL"]
    native --> token["セッション転送トークン"] --> url
    url --> org{"組織のコンテキストは<br/>必要ですか？"}
    org -- "Yes" --> param["organizationパラメーターを含める"]
    org -- "No" --> open["ポータルを開く"]
    param --> open
```

| エントリーポイント | 使用する場面 | セクション |
| - | - | - |
| Webアプリケーション | ユーザーが同じAuth0ドメインを使用するWebアプリケーションを起点とする場合 | [WebアプリケーションからPortalを開く](#open-a-portal-from-a-web-application) |
| ネイティブアプリケーション | ユーザーがネイティブアプリケーションを起点とし、Portalをアプリ内ブラウザーで開く場合 | [ネイティブアプリケーションからPortalを開く](#open-a-portal-from-a-native-application) |
| [Organization](https://auth0.com/docs/ja-jp/manage-users/organizations.md)コンテキスト | PortalでAuth0 Organizationを管理する場合、またはユーザーが複数のOrganizationに所属している場合 | [OrganizationコンテキストでPortalを開く](#open-a-portal-in-an-organization-context) |

## 前提条件

* ポータルとそのアプリケーション。作成方法については、[Universal Portalsのクイックスタート](https://auth0.com/docs/ja-jp/customize/portals/quickstart.md)をお読みください。アプリケーションを自分で構成する場合は、[Universal Portals用にアプリケーションを構成する](https://auth0.com/docs/ja-jp/customize/portals/configure-portal-application.md)をお読みください。

* ポータルのURL：

  ```text theme={null}
  https://YOUR_DOMAIN/portals/{slug}
  ```

  `YOUR_DOMAIN`にはカスタムドメインを指定します。カスタムドメインがない場合はAuth0ドメインを指定します。`{slug}`はポータルのスラッグです。

  このURLにアクセスすると、ポータルのデフォルトページが開きます。ポータルにデフォルトページが設定されていない場合、ユーザーには「Page not found」というエラーメッセージが表示されます。デフォルトページの構成方法については、[Universal Portalsを構成する](https://auth0.com/docs/ja-jp/customize/portals/customize-portals.md#set-the-default-page)をお読みください。

* ポータルをOrganizationsと併用する場合：
  * ポータルアプリケーションでOrganizationsが許可されていること。詳細については、[Universal Portals用にアプリケーションを構成する](https://auth0.com/docs/ja-jp/customize/portals/configure-portal-application.md#organization-context)をお読みください。
  * ユーザーがOrganizationのメンバーであること。
  * ビジネスポータルの場合、コンポーネントに必要なOrganizationの権限をユーザーが持っていること。詳細については、[My Organization API](https://auth0.com/docs/ja-jp/manage-users/my-organization-api.md)をお読みください。

## Web アプリケーションから Portal を開く

アプリケーションからポータルの URL にリンクします。

```html wrap lines theme={null}
<a href="https://YOUR_DOMAIN/portals/{slug}">Manage your account</a>
```

ユーザーがPortalと同じドメインでAuth0のセッションを持っている場合、Auth0はログインプロンプトを表示せず、シングルサインオン (シングルサインオン（SSO）：ユーザーが1つのアプリケーションにログインすると、他のアプリケーションにも自動的にログインさせるサービスです。シングルログアウトはこれと逆の仕組みで動作します。)によってユーザーをPortalにサインインさせます。セッションがない場合は、Auth0がログインページを表示し、ログイン後にユーザーをPortalへ戻します。

## ネイティブアプリケーションからポータルを開く

[ネイティブからWebへのSSO](https://auth0.com/docs/ja-jp/authenticate/single-sign-on/native-to-web)を使用すると、ユーザーのセッションをネイティブアプリケーションからポータルへ引き継ぐことができます。ネイティブアプリケーションは、リフレッシュトークンを使い捨てのセッション転送トークンと交換し、そのトークンをURLに含めてアプリ内ブラウザーでポータルを開きます。

始める前に、ネイティブアプリケーションでネイティブからWebへのSSOを構成してください。詳細については、「[ネイティブから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/configure-portal-application.md#native-application)」をお読みください。

### リフレッシュトークンをセッション転送トークンに交換する

このリクエストは、アプリ内ブラウザーを開く直前に実行してください。トークンの有効期限は60秒で、使用できるのは1回限りです。

```bash wrap lines theme={null}
curl --request POST \
  --url "https://YOUR_DOMAIN/oauth/token" \
  --header "content-type: application/json" \
  --data '{
    "grant_type": "refresh_token",
    "client_id": "{nativeClientId}",
    "refresh_token": "{refreshToken}",
    "audience": "urn:YOUR_DOMAIN:session_transfer"
  }'
```

レスポンスに含まれる `access_token` がセッション転送トークンです。

### アプリ内ブラウザーを開く

トークンを付与したポータルのURLを開きます：

```text theme={null}
https://YOUR_DOMAIN/portals/{slug}?session_transfer_token={sessionTransferToken}
```

Portalはトークンを Auth0 に転送し、ユーザーをサインインさせます。

### アプリ内ブラウザーでポータルのナビゲーションを非表示にする

デフォルトでは、ポータルには上部バー、サイドバー、ユーザーメニューが表示されます。アプリ内ブラウザーの場合、ナビゲーションやユーザーのコンテキストはネイティブアプリケーション側ですでに提供されているため、URLパラメーターを使ってこれらの要素を非表示にできます。

| パラメーター | 効果 |
| - | - |
| `hide_sidebar=true` | サイドバーのナビゲーションと、その中のユーザーメニューを非表示にします。 |
| `hide_topbar=true` | 上部バーを非表示にします。 |
| `hide_user_menu=true` | 上部バーとサイドバーから、ユーザーのアバターとメニューを非表示にします。 |

以下のワイヤーフレームは、各パラメーターとよく使われる組み合わせを適用した場合の表示を示しています。

これらのパラメーターは、ユーザーがポータル内のページを移動しても保持されます。そのため、アプリ内ブラウザーを開くときに一度追加するだけで済みます。

```text theme={null}
https://YOUR_DOMAIN/portals/{slug}?session_transfer_token={sessionTransferToken}&hide_sidebar=true&hide_user_menu=true
```

## Organizationのコンテキストでポータルを開く

特定の[Organization](https://auth0.com/docs/ja-jp/manage-users/organizations.md)を対象にポータルを開くには、`organization`パラメーターを使用します。[My Organization API](https://auth0.com/docs/ja-jp/manage-users/my-organization-api.md)には操作対象のOrganizationが必要なため、ビジネス向けポータルでは必ずこのパラメーターを指定してください。コンシューマー向けポータルでは、ユーザーが複数のOrganizationに所属している場合に指定してください。

### URL を作成する

ポータルの URL に Organization を追加します。

```text theme={null}
https://YOUR_DOMAIN/portals/{slug}?organization={organization}
```

Portalは`organization`をAuth0の`/authorize`エンドポイントに転送するため、他の`/authorize`リクエストと同じ識別子の形式を使用してください。具体的には、`org_abc123`のようなOrganization IDか、テナントで名前を受け付けるようにセットアップしている場合はOrganization名を指定します。詳細については、「[認証APIでOrganization名を使用する](https://auth0.com/docs/ja-jp/manage-users/organizations/configure-organizations/use-org-name-authentication-api.md)」をお読みください。

### アプリケーションからポータルを開く

アプリケーションでOrganizationを選択してから、そのURLにリンクします。ネイティブアプリケーションの場合は、アプリ内ブラウザーで開くURLに`organization`を追加します。詳細については、「[ネイティブアプリケーションからポータルを開く](#open-a-portal-from-a-native-application)」をお読みください。

ネイティブアプリケーションの場合、`organization`の値はセッション転送トークンのOrganizationと一致している必要があります。一致しない場合、Auth0はトークンを拒否するため、ユーザーは再度サインインしなければなりません。詳細については、「[OrganizationsでのネイティブからWebへのSSO](https://auth0.com/docs/ja-jp/authenticate/single-sign-on/native-to-web/configure-implement-native-to-web.md#native-to-web-sso-with-organizations)」をお読みください。

### Organizationの切り替え

アクティブなポータルセッションを持つユーザーが別の`organization`を指定してPortalを開くと、PortalはそのOrganizationでユーザーを再度サインインさせ、既存のポータルセッションを置き換えます。

### Organization コンテキストにおける Portal の動作

* My Organization API を呼び出すコンポーネントは、ユーザーの Organization を対象に動作します。
* Portal には、その Organization のブランディングが適用されます。
* [MFA ステップアップチャレンジ](https://auth0.com/docs/ja-jp/secure/multi-factor-authentication/step-up-authentication.md)が発生しても、ユーザーは同じ Organization 内に留まります。

## ユーザーがPortalを開いたときにアクションを実行する

Portalへのサインイン時には、[post-loginアクション](https://auth0.com/docs/ja-jp/customize/actions/actions-overview.md)が実行されます。Portalでのみロジックを実行するには、アプリケーションのClient IDと`event.client.client_id`を比較します。

次の例では、ビジネス用Portalへのアクセスを制限します。なお、Organization 管理者には`admin`ロールを割り当てていることを前提としています。Organizationでサインインし、かつ`admin`ロールを持つユーザーだけがPortalにアクセスできるようにします。

```javascript wrap lines theme={null}
exports.onExecutePostLogin = async (event, api) => {
  const PORTAL_CLIENT_ID = "{portalClientId}";

  if (event.client.client_id !== PORTAL_CLIENT_ID) {
    return;
  }

  const roles = event.authorization?.roles ?? [];

  if (!event.organization || !roles.includes("admin")) {
    api.access.deny("Only organization administrators can open this portal.");
  }
};
```

ユーザーがPortalを開く前に利用規約への同意を求める[Auth0 Form](https://auth0.com/docs/ja-jp/customize/forms.md)を表示することもできます。Formのフローで同意を記録しておけば、アクションがFormを再度表示することはありません。

```javascript wrap lines theme={null}
exports.onExecutePostLogin = async (event, api) => {
  const PORTAL_CLIENT_ID = "{portalClientId}";

  if (event.client.client_id !== PORTAL_CLIENT_ID) {
    return;
  }

  if (!event.user.app_metadata?.terms_accepted) {
    api.prompt.render("{formId}");
  }
};

exports.onContinuePostLogin = async (event, api) => {
  // ユーザーがフォームへの入力を完了した後に実行するロジックをここに追加します
};
```

詳細については、「[アクションを使用してFormをレンダリングする](https://auth0.com/docs/ja-jp/customize/forms/render.md)」をお読みください。

## URLパラメーター

| パラメーター | 値 | `/authorize`への転送 | 説明 |
| - | - | - | - |
| `session_transfer_token` | 文字列 | はい | ネイティブからWebへのSSOで使用するセッション転送トークンです。使用できるのは1回のみで、60秒で有効期限が切れます。 |
| `organization` | 文字列 | はい | ユーザーのサインイン先となる組織IDまたは組織名です。 |
| `hide_sidebar` | `true` | いいえ | サイドバーを非表示にします。 |
| `hide_topbar` | `true` | いいえ | トップバーを非表示にします。 |
| `hide_user_menu` | `true` | いいえ | トップバーとサイドバーのユーザーメニューを非表示にします。 |

## 次のステップ

> [card] [Universal Portals用にアプリケーションを構成する](https://auth0.com/docs/ja-jp/customize/portals/configure-portal-application.md)
>
> ネイティブアプリケーションとOrganizationsで必要となるアプリケーションのオプションを設定します。

> [card] [Universal Portalsのアーキテクチャ](https://auth0.com/docs/ja-jp/customize/portals/architecture.md)
>
> Portal内でサインイン、コンポーネントの呼び出し、セッションがどのように機能するかを確認します。

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