> ## Documentation Index
> Fetch the complete documentation index at: https://docs-dev-fix-docs-5528-php-updates.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Google Workspaceへのアプリ接続

> エンタープライズ接続を使ってGoogle Workspaceにアプリを接続する方法について説明します。

<Card title="Googleのソーシャル接続やエンタープライズ接続を使用する">
  アプリケーションに[Googleのソーシャル接続](https://marketplace.auth0.com/integrations/google-social-connection)が既にある場合、同じドメインに対して新しいGoogle Workspace接続を作成すると、ソーシャル接続のユーザーが新しいエンタープライズ接続でログインできるようになります。これは、Google Workspaceのエンタープライズ接続が有効に設定されているかに左右されません。
</Card>

## 前提条件

開始する前に：

* [Auth0にアプリケーションを登録します](/docs/ja-jp/get-started/auth0-overview/create-applications)。

  * 適切な **［Application Type（アプリケーションタイプ）］** を選択します。
  * **`{https://yourApp/callback}`** の **［Allowed Callback URL（許可されているコールバックURL）］** を追加します。
  * アプリケーションの[［Grant Types（付与タイプ）］](/docs/ja-jp/get-started/applications/update-grant-types)に適切なフローが必ず含まれていることを確認してください。

## ステップ

アプリケーションをGoogle Workspaceに接続するには、以下を行う必要があります：

1. [Googleでアプリを設定する](#set-up-your-app-in-google)
2. [Auth0でエンタープライズ接続を作成する](#create-an-enterprise-connection-in-auth0)
3. [Auth0アプリケーションでエンタープライズ接続を有効にする](#enable-the-enterprise-connection-for-your-auth0-application)
4. [接続のテスト](#test-the-connection)

<Card title="Google Workspaceアカウント">
  事前に、有効なGoogle Workspaceアカウントと、管理者として **独自に所有** しているGoogle Workspaceの組織部門が必要です。
</Card>

## Googleでアプリを設定する

Google Workspaceを使用してユーザーがログインできるようにするには、Google開発者コンソールでアプリケーションを登録する必要があります。

<Warning>
  事前に、自身が管理者となっている **独自の** Google Workspaceの組織部門が設定されている必要があります。
</Warning>

### 新規アプリケーションを登録する

Googleに新規アプリケーションを登録する方法については、Googleの[OAuth 2.0の設定](https://support.google.com/googleapi/answer/6158849)に関する文書をご覧ください。このプロセスでGoogleは、ご利用のアプリケーション用の **クライアントID** と **クライアントシークレット** を作成しますので、それをメモしておきます。

アプリの設定時、これらの設定を必ず使用してください：

* **<Tooltip data-tooltip-id="react-containers-DefinitionTooltip-0" href="/docs/ja-jp/glossary?term=oath2" tip="OAuth 2.0: 認可プロトコルとワークフローを定義する認可フレームワーク。" cta="用語集の表示">OAuth</Tooltip>同意画面** で、\*\* ［Authorized domains（承認されたドメイン）］\*\* の下に、`auth0.com`を追加します。
* アプリケーションの種類を選択するよう指示された場合は、 **［Webアプリケーション］** を選び、以下のパラメーターを設定します：

  \| フィールド | 説明 |
  \| --- | --- |
  \| Name（名前） | アプリケーションの名前。 |
  \| Authorized JavaScript origins（認可されたJavaScriptオリジン） | `https://{yourDomain}` |
  \| Authorized redirect URIs（認可されたリダイレクトURI） | `https://{yourDomain}/login/callback` |

  <Card title="リダイレクト用のAuth0ドメイン名を見つける">
    上記で、 [カスタムドメイン](/docs/ja-jp/customize/custom-domains)機能を使っていないのにAuth0ドメイン名が表示されない場合は、ドメイン名がテナント名、地域のサブドメイン、および「`auth0.com`」をドット記号（「`.`」）で区切って連結したものだからです。

    たとえば、テナント名が「`exampleco-enterprises`」でテナントがUS地域にある場合、Auth0ドメイン名は「`exampleco-enterprises.us.auth0.com`」、**Redirect URI（リダイレクトURI）** は「`https://exampleco-enterprises.us.auth0.com/login/callback`」になります。

    ただし、テナントがUS地域にあり、2020年6月よりも前に作成された場合、Auth0ドメイン名は「`exampleco-enterprises.auth0.com` 」、**Redirect URI（リダイレクトURI）** は「`https://exampleco-enterprises.auth0.com/login/callback`」になります。

    [カスタムドメイン](/docs/ja-jp/customize/custom-domains)を使っている場合、**Redirect URI（リダイレクトURI）** は「`https://<YOUR CUSTOM DOMAIN>/login/callback`」になります。
  </Card>

<Warning>
  アプリケーションが機密性の高いOAuthスコープを要求した場合は、[Googleによる審査の対象](https://developers.google.com/apps-script/guides/client-verification)となります。
</Warning>

### Admin SDK Serviceを有効化する

Google Workspaceのエンタープライズドメインに接続する予定であれば、 **Admin SDK Service** を有効にする必要があります。方法については、Googleの[APIの有効化と無効化](https://support.google.com/googleapi/answer/6158841)に関する文書をご覧ください。

## Auth0でエンタープライズ接続を作成する

<Warning>
  Google Enterprise接続では、Auth0ユーザープロファイルに最大200個のグループを含めることができます。ユーザープロファイルにあるグループ数が200を超えている場合には、これらの結果が表示されないことがあります。

  Google Workspaceでは、グループ名の一意性は強要されません。認可にGoogleグループを使用している場合、**［Groups（グループ）］>［Extended Groups Attribute Format（拡張グループ属性形式）］** オプションを選択し、名前の代わりにグループの一意の識別子に対して、グループメンバーシップの一意のIDとメールアドレスを確認します。

  グループの拡張プロパティについては、以下に記載の「[GoogleからのIDプロバイダートークンを使用する](#use-identity-provider-tokens-from-google)」セクションを参照してください。認可にGoogleグループを使用する場合は、権限のないユーザーがグループを変更できないようにワークスペースを保護する必要があります。
</Warning>

次に、Auth0でGoogle Workspaceのエンタープライズ接続を作成・構成する必要があります。Google開発者コンソールでご利用のを設定した際に作成された **クライアントID** と **クライアントシークレット** があることを確認してください。

1. [［Auth0 Dashboard］>［Authentication（認証）］>［Enterprise（エンタープライズ）］](https://manage.auth0.com/#/connections/enterprise)に移動し、**Google Workspace** の［`+`］記号をクリックします。

   <Frame>
     <img src="https://mintcdn.com/docs-dev-fix-docs-5528-php-updates/BPQny5Q2lnPFhDgT/docs/images/ja-jp/cdy7uua7fh8z/1fSTcrZpkgkPR64NnI1lr8/101fc19f62d82b5c7b13d88f3a0a8e96/Enterprise_Connections_-_JP.png?fit=max&auto=format&n=BPQny5Q2lnPFhDgT&q=85&s=8e788eac460e8e12ece7090c3052d404" alt="Dashboard - 接続 -エンタープライズ" width="1178" height="1077" data-path="docs/images/ja-jp/cdy7uua7fh8z/1fSTcrZpkgkPR64NnI1lr8/101fc19f62d82b5c7b13d88f3a0a8e96/Enterprise_Connections_-_JP.png" />
   </Frame>

2. 接続の詳細を入力し、 **［Create（作成）］** をクリックします。

   \| フィールド | 説明 |
   \| --- | --- |
   \| **Connection name（接続名）** | 接続の論理識別子。テナントに対して一意である必要があります。一度設定すると、この名前は変更できません。 |
   \| **Google Workspace Domain（Google Workspaceドメイン）** | 組織のGoogle Workspaceドメイン名。 |
   \| **Client ID（クライアントID）** | 登録済みのGoogleアプリケーションの一意の識別子。Google開発者コンソールで登録したアプリの **Client ID（クライアントID）** の保存値を入力します。 |
   \| **Client Secret（クライアントシークレット）** | 登録済みのGoogleアプリケーションへのアクセスに使用する文字列。Google開発者コンソールで登録したアプリの **Client Secret（クライアントシークレット）** の保存値を入力します。 |
   \| **Attributes（属性）** | アプリがアクセスできるサインイン済みユーザーの基本属性。Auth0ユーザープロファイルにどの程度情報を保管したいかを示します。オプションには、**Basic Profile（基本プロファイル）**（`email`、`email verified`フラグ）と**Extended Profile（拡張プロファイル）**（名前、公開プロファイルURL、写真、性別、生年月日、国、言語、タイムゾーン）があります。 |
   \| **Extended Attributes（拡張属性）**（任意） | アプリがアクセスできるログイン済みユーザーの拡張属性。オプションには、**Groups（グループ）**（ユーザーが属する配布リスト。グループ名、グループのメールアドレス、一意のグループIDを取得する拡張グループ属性形式オプションを含む）、**Is Domain Administrator（ドメイン管理者か）**（ユーザーがドメイン管理者であるかどうかを示す）、**Is Account Suspended（アカウントが一時停止されているか）**（ユーザーのアカウントが停止されているかどうかを示す）、**Agreed to Terms（利用規約に同意済み）**（ユーザーが利用規約に同意したかどうかを示す）があります。 |
   \| **Auth0 APIs（Auth0 API）**（任意） | **Enable Users API（ユーザーAPIを有効にする）** が選択されている場合は、Google Directory APIを呼び出す機能が必要であることを示します。 |
   \| **Auth0 User ID（Auth0ユーザーID）**（任意） | デフォルトでは、Auth0の`user_id`は`email`にマッピングされます。**Use ID instead of Email for Auth0 User ID（Auth0ユーザーIDにメールの代わりにIDを使用する）** を有効にすると、`user_id`は`id`にマッピングされます。これは新しい接続に対してのみ設定でき、構成後は変更できません。 |
   \| **Sync user profile attributes at each login（ログインの度にユーザープロファイル属性を同期する）** | 有効にすると、Auth0はユーザープロファイルデータを各ユーザーログインと自動的に同期し、接続ソースで行われた変更がAuth0で自動的に更新されるようにします。 |

   <Frame>
     <img src="https://mintcdn.com/docs-dev-fix-docs-5528-php-updates/edu3KASxfgCs4dqF/docs/images/ja-jp/cdy7uua7fh8z/5s3W98sar77mRxZ3F3s0Ol/e5412822e7e34052890d5c991d622928/Enterprise_Connection_-_Google_Work_-_Japanese.png?fit=max&auto=format&n=edu3KASxfgCs4dqF&q=85&s=73716c95adefada7a661dd1295912e87" alt="Google Workspace接続を作成する" width="902" height="1481" data-path="docs/images/ja-jp/cdy7uua7fh8z/5s3W98sar77mRxZ3F3s0Ol/e5412822e7e34052890d5c991d622928/Enterprise_Connection_-_Google_Work_-_Japanese.png" />
   </Frame>

3. Google Workspaceを設定するための適切な管理者権限をお持ちの場合は、GoogleのAdmin APIを使って **［Continue（続行）］** をクリックします。管理者権限を持っていない場合には、提示されたURLを管理者に提供して必要な設定を調整してもらってください。

4. **［Login Experience（ログインエクスペリエンス）］** タブでこの接続でのユーザーログインの方法を設定できます。

| フィールド                                   | 説明                                                                                                                                                                                                                                                       |
| --------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **ホームレルムディスカバリー**                       | ユーザーのメールドメインを、指定されたIDプロバイダードメインと比較します。詳細については、\[識別子優先認証の構成]を参照してください。（[https://auth0.com/docs/ja-jp/authenticate/login/auth0-universal-login/identifier-first）](https://auth0.com/docs/ja-jp/authenticate/login/auth0-universal-login/identifier-first）) |
| **接続ボタンを表示**                            | このオプションでは、アプリケーションの接続ボタンをカスタマイズするため次の選択肢が表示されます。                                                                                                                                                                                                         |
| **Button display name（ボタン表示名）** （オプション） | ユニバーサルログインのログインボタンをカスタマイズするために使用されるテキスト。設定されるとボタンは以下を読み取ります："Continue with `{Button display name}`"                                                                                                                                                      |
| **Button logo（ボタンロゴ）URL** （任意）          | ユニバーサルログインのログインボタンをカスタマイズするために使用される画像のURL。設定されると、ユニバーサルログインのログインボタンは、20px×20pxの四角で画像を表示します。                                                                                                                                                              |

<Callout icon="file-lines" color="#0EA5E9" iconType="regular">
  任意のフィールドは、New Universal Loginでのみ使用することができます。Classic Loginを使用している場合、［Add（追加）］ボタン、ボタンの表示名、ボタンロゴのURLは表示されません。
</Callout>

## 接続を使用する

### Auth0アプリケーションでエンタープライズ接続を有効化する

新たなAD接続を使うにはまずAuth0アプリケーションの[接続を有効](/docs/ja-jp/authenticate/identity-providers/enterprise-identity-providers/enable-enterprise-connections)にする必要があります。

### 接続をテストする

これで[接続をテスト](/docs/ja-jp/authenticate/identity-providers/enterprise-identity-providers/test-enterprise-connections)する準備が整いました。

### Googleにリフレッシュトークンを要求する

Googleは常に、ユーザープロファイルに保存されているアクセストークンを返します。`access_type=offline&approval_prompt=force`を認証要求に追加すると、Auth0はこれらのパラメーターをGoogleに転送します。その後Googleはやはりユーザープロファイルに保存されているリフレッシュトークンを返します。

### GoogleからのIDプロバイダートークンの使用

Auth0がデフォルトで取得するユーザーやグループ詳細以外に追加で取得した場合は、Googleから返されたアクセストークンを使ってGoogleのAPIを呼び出せます。これらのトークンにセキュアにアクセスするには、[IDプロバイダーのアクセストークン](/docs/ja-jp/secure/tokens/access-tokens/identity-provider-access-tokens)に示すガイドラインに従ってください。

Google Workspaceの場合、Auth0は個別`ユーザー`オブジェクトとワークスペース管理者の`接続`オブジェクト上にアクセストークンとリフレッシュトークンを保存します。

GoogleのDirectory Admin APIでユーザーの拡張されたグループプロパティを取得するには、[Auth0 Dashboard](https://manage.auth0.com/#/connections/enterprise)でGoolgle Workspace接続まで移動し、 **［Groups（グループ）］** の拡張属性を有効にします。次に **［Setup（設定）］** タブを使って管理者の合意を完了します。

これらのステップを完了後、Auth0 <Tooltip data-tooltip-id="react-containers-DefinitionTooltip-0" href="/docs/ja-jp/glossary?term=management-api" tip="Management API: 顧客が管理タスクを実行できるようにするための製品。" cta="用語集の表示">Management API</Tooltip>の[Get a connection（接続取得）](/docs/ja-jp/api/management/v2/connections/get-connections-by-id)エンドポイントを使って`接続`オブジェクトの管理者アクセストークンを取得します。その後、 このトークンを使ってGoogleの[Manage Groups](https://developers.google.com/admin-sdk/directory/v1/guides/manage-groups#get_all_member_groups)エンドポイントを呼び出すことができます。

**呼び出し例** ：

```json lines theme={null}
curl -H "Authorization: OAuth {admin_access_token}" https://admin.googleapis.com/admin/directory/v1/groups\?userKey={user_key}
```

### Actionsで認証を検証する

`ログイン後の`[Actions](/docs/ja-jp/customize/actions/explore-triggers/signup-and-login-triggers/login-trigger)を使って、認証イベントがGoogle組織の一員である正規ユーザーからのものかどうかを検証できます。その結果、組織の一員でなくなったユーザーがアプリケーションに不正アクセスすることを防ぐことで、脆弱性の可能性を最小限に抑えることができます。

正規のGoogle認証であることを検証するには、`ログイン後の`Actionsを使って、ユーザーに関連付けられた`idp_tenant_domain`クレームを検証し、その値がそのユーザーに対して予想される組織と合致するかどうか確認します。

`idp_tenant_domain`を検証できるのは、以下の接続タイプの認証を使うユーザーに限ります：

* Googleソーシャル
* Google Workspace
* Google OIDC

#### 例

以下に、`idp_tenant_domain`を`ログイン後`Actionsを使って検証する方法を示します。

```lines theme={null}
exports.onExecutePostLogin = async (event, api) => {

 // Example to block social accounts
 if (event.connection.strategy === 'google-oauth2' 
 && !event.user.idp_tenant_domain) // Non-organization Accounts
 {
   api.access.deny('Account not allowed for login');
 }

 // Example to only permit allowlisted organization accounts
 if (event.connection.strategy === 'google-oauth2' 
 && event.user.idp_tenant_domain != "allowedOrganization.com") 
 {
   api.access.deny('Your Google Organization is not allowed to login');
 }

};
```

### 既存接続を再承認する

Google Workspace管理者が削除された場合、ログインの失敗を回避するには、その管理者が設定・認証したGoogle Workspaceエンタープライズ接続を新たなGoogle Workspace管理者が再承認する必要があります。そのためには、新たな管理者がGoogle Workspaceエンタープライズ接続の\*\*［Setup（セットアップ）］\*\* タブにあるリンクを使います。

## 次の手順

* [Auth0のライブラリーを使ってAuth0を統合する](/docs/ja-jp/libraries)
* [Authentication APIを使ってAuth0を統合する](/docs/ja-jp/api/authentication)
* [認証フローについての詳細を読む](/docs/ja-jp/get-started/authentication-and-authorization-flow)
* [追加のパラメーターをIDプロバイダーに渡す](/docs/ja-jp/authenticate/identity-providers/pass-parameters-to-idps)
* [アクセス許可のためにユーザーを再度プロンプトする](/docs/ja-jp/authenticate/identity-providers/social-identity-providers/reprompt-permissions)
