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

# Feishu/Lark・DingTalk・OIDC によるシングルサインオン

> Feishu または Lark、DingTalk、あるいは Okta、Entra ID、Auth0、Keycloak などの任意の OpenID Connect ID プロバイダーで、メンバーが Alforse にサインインできるようにします。

[SAML 2.0](https://docs.alforse.com/ja/docs/reference/single-sign-on.md) のほかに、Alforse は、サインインを貴社の Feishu / Lark または DingTalk の組織、あるいは任意の OpenID Connect（OIDC）ID プロバイダーに引き渡すことができます。会社の管理者が **Single Sign-On** ページで一度設定すると、その後は、検証済みドメインの業務用メールアドレスを入力したメンバーが、そのプロバイダーへ誘導されてサインインします。

## 基本概念

* **会社ごとに 1 つの接続。**会社が持てるシングルサインオン接続は 1 つで、プロトコルは **OpenID Connect**、**Feishu / Lark**、**DingTalk**、SAML のいずれか 1 つです。このページで前の 3 つのいずれかを保存すると、SAML 接続は置き換えられます（[SAML からの切り替え](#switching-from-saml)を参照）。
* **検証済みドメインがサインインを振り分けます。**DNS レコードで所有を証明したメールドメインだけが、プロバイダーへ誘導されます。
* **招待が先。**シングルサインオンがアカウントを自動で作成することはありません。サインインできるのは、既存のメンバーか、会社からの保留中の招待を承諾した人だけです。
* **リンクされたアカウント。**最初のサインインに成功すると、プロバイダーのアカウントが Alforse の担当者にリンクされます。以降のサインインでは、そのリンクが直接使われます。

## 始める前に

* **権限。**会社設定を変更する権限（`settings` の update）が必要です。権限がないと、ページには **"Administrators only"**（管理者のみ）と表示されます。
* **利用可否。**シングルサインオンが契約に含まれていない場合、ページには **"Single sign-on isn't in your plan"**（シングルサインオンはご契約のプランに含まれていません）と表示されます。
* **プロバイダー側の権限。**ID プロバイダーでアプリケーションを作成する権限が必要です。Feishu / Lark のオープンプラットフォームではカスタムアプリ、DingTalk の開発者コンソールでは社内アプリ、IdP では OIDC の Web アプリケーションです。
* **DNS の操作権限。**メールドメインごとに TXT レコードを公開します。

## Single Sign-On ページを開く

1. [https://app.alforse.com](https://app.alforse.com) で ERP にサインインします。
2. 同じブラウザーで **[https://api.alforse.com/identity](https://api.alforse.com/identity)** を開きます。

ページに **"Sign in to continue"**（続行するにはサインインしてください）と表示された場合は、**Sign in** を選択し、ERP にサインインしてから、もう一度そのアドレスを開きます。ページ上部の **EN** / **中文** ボタンで、ページの表示を英語と簡体字中国語に切り替えられます。タイトルの横のステータスは、接続があれば **Active**、なければ **Not configured** と表示されます。

ページには 5 つのカード（**Identity Provider**、**Require single sign-on**、**Email Domains**、**Sign-in Links**、**Linked Accounts**）があります。接続を保存するまでは、**Identity Provider** だけが表示されます。

Alforse screenshot**api.alforse.com/identity の Single Sign-On ページ：Provider の選択、Redirect URI のコピー欄、Connect ボタンがある Identity Provider カード**

どのプロバイダーも、Identity Provider カードから設定します。

## Identity Provider カード

| フィールド | 表示される条件 | 入力する内容 |
| - | - | - |
| **Provider** | すべて | **OpenID Connect (Okta, Entra ID, Auth0, Keycloak…)**、**Feishu / Lark**、**DingTalk** のいずれか。 |
| **Redirect URI** | すべて | 読み取り専用で、コピーボタンが付いています。この値そのものをプロバイダーに登録します。 |
| **View setup guide** | すべて | プロバイダー別の手順をサイドパネルで開きます。 |
| **Issuer URL** | OpenID Connect | IdP の発行者（issuer）。`https://` で始まります。 |
| **Region** | Feishu / Lark | **Feishu (feishu.cn)** または **Lark (larksuite.com)**。 |
| **Client ID** / **App ID** / **Client ID (AppKey)** | すべて | プロバイダーが発行したアプリケーションの ID。 |
| **Client secret** / **App Secret** / **Client Secret (AppSecret)** | すべて | アプリケーションのシークレット。保存後は二度と表示されず、欄には "Saved. Leave empty to keep it."（保存済みです。変更しない場合は空のままにしてください。）と表示されます。 |
| **Tenant key**（任意） | Feishu / Lark | Feishu のテナントキー。空のままにすると、Alforse が App Secret を使って Feishu から読み取ります。 |
| **CorpId** | DingTalk | DingTalk 組織の CorpId。必須です。 |

**Connect**（既存の接続では **Save changes**）を選択します。Alforse は保存の前にプロバイダーに対して設定を確認し、"Single sign-on saved"（シングルサインオンを保存しました）と表示します。

### Redirect URI

どのプロバイダーのアプリケーションも、次の 1 つのリダイレクト（コールバック）URI を使う必要があります。

```text theme={null}
https://api.alforse.com/api/web/auth/v1/sso/oauth/callback
```

これはすべての会社、すべてのプロバイダーで同じです。入力せず、ページからコピーしてください。

## プロバイダーを設定する

**Feishu / Lark**

**Feishu オープンプラットフォーム**（[https://open.feishu.cn。Lark](https://open.feishu.cn。Lark) の場合は [https://open.larksuite.com）で行う手順：](https://open.larksuite.com）で行う手順：)

1. **カスタムアプリ**（企業自建应用）を作成します。
2. **Credentials & Basic Info** で、**App ID** と **App Secret** をコピーします。
3. **Security Settings → Redirect URLs** に、上記の Redirect URI を追加します。
4. **Permissions** で、次を許可します。
   * ユーザーの基本情報の読み取り（必須）
   * ユーザーの企業メールの読み取り（メールアドレスで担当者を照合するため）
   * テナント情報の読み取り（Alforse で **Tenant key** を空のままにする場合）
5. バージョンを作成し、サインインさせたい人にアプリを公開します。

**Alforse で行う手順：****Feishu / Lark** を選び、利用したプラットフォームに合う **Region** を選択し、**App ID** と **App Secret** を貼り付けます。必要なら **Tenant key** も貼り付け、**Connect** を選択します。

* 検証済みと見なされるのは、Feishu テナントが発行した**企業メール**だけです。ユーザーが自分のプロフィールに入力したアドレスは、照合には使われません。
* 企業メールを持たない人は、[サインインリンク](#sign-in-links)で一度だけ接続します。

**DingTalk**

**DingTalk 開発者コンソール**（[https://open-dev.dingtalk.com）で行う手順：](https://open-dev.dingtalk.com）で行う手順：)

1. **App Development** で、**社内アプリ**（企业内部应用）を作成します。
2. **Credentials & Basic Info** で、**Client ID (AppKey)** と **Client Secret (AppSecret)** をコピーします。
3. **Security Settings → Redirect URL** に、上記の Redirect URI を追加します。
4. **Permissions** で、ユーザーの個人情報の読み取り（`Contact.User.Read`）を許可します。
5. 開発者コンソールのホームページから、組織の **CorpId** をコピーします。

**Alforse で行う手順：****DingTalk** を選び、**Client ID (AppKey)**、**Client Secret (AppSecret)**、**CorpId** を貼り付けて、**Connect** を選択します。

> [!NOTE]
>
> DingTalk のメールアドレスはユーザー自身が管理しているため、Alforse は照合に使いません。各担当者を[サインインリンク](#sign-in-links)で一度だけ接続してください。以降は DingTalk で直接サインインできます。

**OpenID Connect**

**ID プロバイダー**（Okta、Entra ID、Auth0、Keycloak、その他の OIDC プロバイダー）で行う手順：

1. OpenID Connect の**Web アプリケーション**を作成します。Okta の場合：**Applications → Create App Integration → OIDC – Web Application**。
2. グラントタイプを **Authorization Code** にし、サインインのリダイレクト URI に上記の Redirect URI を設定します。
3. サインインを許可する個人またはグループを割り当てます。
4. **Client ID** と **Client secret** をコピーします。
5. **Issuer URL** を確認します。Okta の場合：**Security → API → Authorization Servers → Issuer URI**。例：`https://your-org.okta.com/oauth2/default`。

**Alforse で行う手順：****OpenID Connect** を選び、**Issuer URL**、**Client ID**、**Client secret** を入力して、**Connect** を選択します。

プロバイダー側の要件：

* issuer は、認証情報・クエリ・フラグメントを含まない `https://` の URL で、ディスカバリードキュメントの `issuer` と完全に一致している必要があります。
* ディスカバリードキュメント内のすべてのエンドポイントは、issuer 自身のホスト上の `https://` でなければなりません。
* ID トークンは **RS256** で署名されている必要があります。
* Alforse はスコープ `openid email profile` を要求し、PKCE を使用します。メールアドレスで担当者を照合するには、ID トークンに `email` と `email_verified: true` が含まれている必要があります。

## メールドメインを検証する

接続を保存したら、メンバーがサインインに使うドメインを、**Email Domains** カードで 1 つずつ追加します。**Add a domain** の下にドメイン（例：`example.com`）を入力し、**Add** を選択します。追加直後のドメインは **Pending** で、公開すべき TXT レコードが表示されます。

| フィールド | 値 |
| - | - |
| **Host** | `_alforse-challenge.example.com` |
| **Value** | `alforse-domain-verification=<your unique token>` |

DNS プロバイダーでこのレコードを公開してから、**Verify** を選択します。成功するとドメインは **Verified** になり、ページに "Domain verified"（ドメインを検証しました）と表示されます。ルールは SAML と同じです。[ドメインの検証](https://docs.alforse.com/ja/docs/reference/single-sign-on.md#verifying-a-domain)を参照してください。

## サインインを担当者と照合する仕組み

メンバーは、ERP のログインページで業務用メールアドレスを入力し、**Continue** を選択してサインインします。検証済みドメインのメールアドレスであれば、プロバイダーへ誘導されます。プロバイダーから戻ると、Alforse は貴社の中だけを対象に、次の順序で照合します。

1. **リンク済みアカウント。**プロバイダーのアカウントがすでに担当者にリンクされている場合：その担当者としてサインインします。
2. **検証済みメール。**プロバイダーが、貴社の検証済みドメインのいずれかに属する検証済みメールアドレスを返した場合：一致する有効なメンバーはサインインし、一致する保留中の招待は承諾されてそのロールが適用されます。その後、アカウントがリンクされます。
3. **サインインリンク。**発行したワンタイムのサインインリンクを担当者が開いた場合：アカウントは、そのリンクの対象となったメンバーまたは招待にリンクされます。

それ以外の人は拒否され、アカウントは作成されません。Feishu / Lark と DingTalk では、プロバイダーのアカウントが、接続に保存されたテナントキーまたは CorpId に属していることも Alforse が確認します。

NOTE

**1 人につきプロバイダーアカウントは 1 つ**

各担当者がリンクできるアカウントは、プロバイダーごとに 1 つです。別のアカウントをリンクするには、先に **Linked Accounts** で既存のリンクを取り消してください。

## サインインリンク

プロバイダーがメールアドレスを証明できない担当者（DingTalk のすべての人と、企業メールを持たない Feishu のユーザー）を接続するには、**Sign-in Links** カードを使います。

1. **Pending invitation** を選ぶか、**Or an existing member's email** に入力します。
2. **Create link** を選択します。
3. **Sign-in link created** ダイアログからリンクをコピーし、ご自身で担当者に送ります。

リンクは `https://api.alforse.com/api/web/auth/v1/sso/oauth/invite?token=…` のような形式です。担当者がこれを開いてプロバイダーでサインインすると、アカウントがリンクされ、以降は通常どおりサインインできます。

* **表示は一度だけ。**リンクはそのダイアログにしか表示されません。紛失した場合は、取り消して新しく作成してください。
* **1 回限り、7 日間有効。**表には、各リンクの **For**、**Status**（**Open**、**Used**、**Revoked**、**Expired**）、**Expires** が表示されます。未使用のリンクは **Revoke** で取り消せます。
* **検証済みドメインが必要。**招待またはメンバーのメールアドレスが、接続の検証済みドメインに属している必要があります。
* サインインリンクは OpenID Connect、Feishu / Lark、DingTalk の接続で利用でき、SAML では利用できません。

## リンクされたアカウント

**Linked Accounts** カードには、すべてのリンクが **Person**、**Provider account**、**Linked by**（**Verified email** または **Sign-in link**）、**Linked** の列で一覧表示されます。**Revoke** を選択するとリンクが削除されます。担当者の Alforse アカウントは残ります。次回のサインインでは、検証済みメールで再び照合されるか、新しいサインインリンクが必要になります。

## シングルサインオンを必須にする

**Require single sign-on** をオンにすると、検証済みドメインのメンバーにとって、貴社のプロバイダーが唯一のサインイン方法になります。マジックリンクなど、ほかのサインイン方法は拒否されます。このスイッチは、少なくとも 1 つのドメインが検証されてから有効になるため、必須にする前にサインインをテストできます。

## SAML からの切り替え

会社がすでに [SAML](https://docs.alforse.com/ja/docs/reference/single-sign-on.md) を使っている場合、カードには "Your company currently signs in with SAML. Saving another provider here replaces it."（現在、会社は SAML でサインインしています。ここで別のプロバイダーを保存すると、置き換えられます。）と表示されます。

* OpenID Connect、Feishu / Lark、DingTalk のいずれかの接続を保存すると、接続から SAML の設定（IdP メタデータ）が削除されます。その時点で SAML でのサインインは止まります。
* メールドメインとその検証、および **Require single sign-on** は、そのまま残ります。
* SAML 以外の接続が有効な間は、**Settings → Security** の SAML カードを保存できません。先にこのページで接続を無効化してください。

## 無効化

**Identity Provider** カードで **Deactivate** を選択し、**Deactivate single sign-on** で確定します。貴社のドメインのメンバーは、プロバイダー経由ではサインインできなくなります。ドメインの検証は削除されますが、リンクされたアカウントは保持されます。そのため、後で同じプロバイダーに再接続する場合は、ドメインの検証をやり直すだけで済みます。

## トラブルシューティング

| 症状またはメッセージ | 原因 | 対処 |
| - | - | - |
| "Administrators only"（管理者のみ） | 会社設定を変更する権限がありません。 | 管理者に `settings` の update 権限を依頼してください。 |
| "Single sign-on isn't in your plan"（シングルサインオンはご契約のプランに含まれていません） | ご契約にシングルサインオンが含まれていません。 | プランをアップグレードしてください。 |
| "The issuer URL must start with [https://."（issuer](https://."（issuer) URL は https\:// で始まる必要があります。） | issuer が https の URL ではない、クエリやフラグメントがある、またはディスカバリードキュメントの `issuer` と異なっています。 | ディスカバリードキュメントに記載されているとおりに issuer を入力してください。 |
| "The identity provider couldn't be reached. Check the issuer URL."（ID プロバイダーに接続できませんでした。issuer URL を確認してください。） | ディスカバリードキュメントを取得できない、エンドポイントが issuer のホスト上の https ではない、または IdP が ID トークンを RS256 で署名していません。 | issuer URL と IdP の署名アルゴリズムを確認してください。 |
| "Enter a valid client secret."（有効なクライアントシークレットを入力してください。） | シークレットがない、または Feishu が App ID / App Secret を拒否しました。 | ID とシークレットをコピーし直し、**Region** を確認してください。 |
| "Enter the CorpId."（CorpId を入力してください。） | DingTalk で CorpId がない、または Feishu でテナントキーがなくテナントも読み取れません。 | CorpId を入力するか、Feishu のテナントキーを貼り付けるか、テナント情報の権限を付与してください。 |
| "Verify this email's domain first."（先にこのメールのドメインを検証してください。） | ドメインが未検証のメールアドレスに対してサインインリンクを作成しました。 | ドメインを検証してから、リンクを作成してください。 |
| "No invitation or member uses this email."（このメールアドレスを使う招待もメンバーもありません。） | メールアドレスに一致する有効なメンバーが 1 人もいません。 | 担当者を招待してから、その招待を選択してください。 |
| "The TXT record wasn't found yet. Try again in a few minutes."（TXT レコードがまだ見つかりません。数分後にもう一度お試しください。） | DNS が反映されていない、またはレコードのホストが間違っています。 | ホスト名を確認して再試行してください。 |
| "The configuration changed in the meantime. It has been reloaded — check and try again."（その間に設定が変更されたため、再読み込みしました。内容を確認して、もう一度お試しください。） | 別の管理者が変更を保存しました。 | 再読み込みされたページを確認し、変更をやり直してください。 |
| サインイン時："Single sign-on succeeded, but this account is not yet linked to your company. Ask your administrator for a sign-in link."（シングルサインオンは成功しましたが、このアカウントはまだ会社にリンクされていません。管理者にサインインリンクを依頼してください。） | プロバイダーが検証済みメールを返しませんでした（DingTalk では常にこの状態です）。 | 担当者のサインインリンクを作成してください。 |
| サインイン時："Single sign-on succeeded but no invite exists for `jane@example.com`. Contact your administrator."（シングルサインオンは成功しましたが、`jane@example.com` への招待がありません。管理者にお問い合わせください。） | 検証済みメールはあるものの、担当者がメンバーでも招待済みでもありません。 | 招待してから、もう一度サインインしてもらってください。 |
| サインイン時："Single sign-on rejected: this email domain is not registered for your company's single sign-on connection."（シングルサインオンは拒否されました：このメールドメインは、会社のシングルサインオン接続に登録されていません。） | プロバイダーのメールアドレスが、未検証のドメインのものです。 | そのドメインを検証してください。 |
| サインイン時："This account belongs to another organization than your company's single sign-on connection."（このアカウントは、会社のシングルサインオン接続とは別の組織に属しています。） | Feishu のテナント、DingTalk の CorpId、または OIDC の issuer が接続と一致しません。 | 担当者は貴社の組織のアカウントを使う必要があります。保存されているテナントキーまたは CorpId を確認してください。 |
| サインイン時："This sign-in link is unknown, already used, revoked or expired. Ask your administrator for a new one."（このサインインリンクは不明、使用済み、取り消し済み、または期限切れです。管理者に新しいリンクを依頼してください。） | リンクが使用済み、取り消し済み、または 7 日を超えています。 | 新しいリンクを作成してください。 |
| サインイン時："Another account of this identity provider is already linked to this user. Contact your administrator."（この ID プロバイダーの別のアカウントが、すでにこのユーザーにリンクされています。管理者にお問い合わせください。） | 担当者にはすでに別のプロバイダーアカウントがリンクされています。 | **Linked Accounts** で古いリンクを取り消してください。 |

## 関連ページ

**SAML によるシングルサインオン**

SAML 2.0 の ID プロバイダーを、設定 → セキュリティから接続します。

[Open](https://docs.alforse.com/ja/docs/reference/single-sign-on.md)

**人員**

サインインするメンバーを招待します。

[Open](https://docs.alforse.com/ja/docs/reference/people.md)

**二要素認証**

ほかのサインイン方法のための、Alforse 独自の第 2 要素です。

[Open](https://docs.alforse.com/ja/docs/reference/two-factor.md)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.