> For the complete documentation index, see [llms.txt](https://ayakaleaf-pro.ayaka.space/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://ayakaleaf-pro.ayaka.space/on-premises/ja/she-ding/overleaf-toolkit/authentication/ldap-authentication.md).

# LDAP 認証

この機能は以下によって開発されました [yu-i-i/overleaf-cep](https://github.com/yu-i-i/overleaf-cep)。ここでは、設定用のドキュメントをいくつか提供します。

{% hint style="warning" %}
Overleaf は次を使用します **passport-ldapauth** ライブラリは比較的古いため、LDAP との互換性は完全には保証できません。特定の LDAP アイデンティティプロバイダ（例えば、 <https://goauthentik.io/>）では、ログインに失敗する場合があります。そのため、可能であれば、事前に OAuth/SAML 方式を使用することを推奨します。
{% endhint %}

### LDAPとは何か

LDAP は外部の ID 検証に使用される認証プロトコルです。Overleaf Server Pro は、標準の認証方法とは別に、Web インターフェース内に専用の LDAP ログインフォームを提供します。ユーザーが LDAP のユーザー名とパスワードを送信すると、Overleaf バックエンドは設定済みの LDAP サーバーに対して認証情報を検証します。たとえば `ldap://ldap:10389`.

<figure><img src="/files/266c8b861e34f3b53c64a09e6a03ca5786dd73d4" alt=""><figcaption><p>LDAP 用の Server Pro の例</p></figcaption></figure>

### 設定

内部的には、Overleaf LDAP は次を使用します [passport-ldapauth](https://github.com/vesse/passport-ldapauth) ライブラリ。これらの設定オプションの多くは次へそのまま渡されます `server` を構成するために使用される config オブジェクト `passport-ldapauth`。LDAP の設定で問題がある場合は、次の README を読む価値があります `passport-ldapauth` 。期待されている設定の内容を把握するために。

環境変数 `EXTERNAL_AUTH` は LDAP 認証モジュールを有効にするために必要です。この環境変数は、有効化される外部認証方式を指定します。この変数の値はリストです。リストに次が含まれている場合 `ldap` 、LDAP 認証が有効になります。

例: `EXTERNAL_AUTH=ldap saml`

Overleaf CEP とは異なり、ayaka-notes 版では LDAP 認証を純粋な認証方式として限定しており、次の URL で利用できます `http://your-overleaf.com/ldap/login`.

LDAP 認証方式を使用する場合、ユーザーはログインフォームに `ユーザー名` および `パスワード` を入力し、以下の処理が試みられます:

1. 定義されたフィルターを使用して LDAP ディレクトリ内の LDAP ユーザーが検索され、 `OVERLEAF_LDAP_SEARCH_FILTER` 認証されます。
2. 認証に成功すると、Overleaf のユーザーデータベースで、認証された LDAP ユーザーのメールアドレスと一致する主メールアドレスを持つユーザーが確認されます:
   * 一致するユーザーが見つかると、 `hashedPassword` このユーザーの hashedPassword フィールドは（存在する場合）削除されます。これにより、以後そのユーザーは LDAP 認証のみでログインできるようになります。
   * 一致するユーザーが見つからない場合は、LDAP サーバーから取得したメール、名、姓を使用して新しい Overleaf ユーザーが作成されます。

{% hint style="danger" %}
LDAP 経由でログインするユーザーについては、Overleaf の MongoDB データベースにハッシュ化されたパスワードを保存しません（既存のものも削除します）。
{% endhint %}

#### 環境変数

* `OVERLEAF_LDAP_URL` **(必須)**
  * LDAP サーバーの URL。
    * 例: `ldaps://ldap.example.com:636` (SSL 経由の LDAP)
    * 例: `ldap://ldap.example.com:389` (未暗号化、または設定されていれば STARTTLS)。
* `OVERLEAF_LDAP_IDENTITY_SERVICE_NAME`
  * ログインページで使用される LDAP アイデンティティサービスの表示名。
  * デフォルト: `LDAP プロバイダーでログイン`.
* `OVERLEAF_LDAP_EMAIL_ATT`
  * LDAP サーバーが返すメール属性。デフォルト `mail`。各 LDAP ユーザーには少なくとも 1 つのメールアドレスが必要です。複数のアドレスが指定されている場合は、最初の 1 つだけが使用されます。
* `OVERLEAF_LDAP_FIRST_NAME_ATT`
  * アプリケーションで使用されるユーザーの名を保持するプロパティ名。通常は `givenName`.
* `OVERLEAF_LDAP_LAST_NAME_ATT`
  * アプリケーションで使用されるユーザーの姓を保持するプロパティ名。通常は `sn`.
* `OVERLEAF_LDAP_NAME_ATT`
  * ユーザーの氏名を保持するプロパティ名。通常は `cn`。前の 2 つの変数のどちらかが定義されていない場合、ユーザーの名および/または姓はこの変数から抽出されます。そうでない場合は使用されません。
* `OVERLEAF_LDAP_PLACEHOLDER`
  * ログインフォームのプレースホルダー。デフォルト: `ユーザー名`.
* `OVERLEAF_LDAP_UPDATE_USER_DETAILS_ON_LOGIN`
  * に設定すると `true`、LDAP ユーザーの `first_name` および `last_name` フィールドをログイン時に更新し、LDAP ユーザー向けの次のユーザー詳細フォームを無効にします `/user/settings` ページ。そうしない場合、詳細は初回ログイン時にのみ取得されます。
* `OVERLEAF_LDAP_BIND_DN`
  * LDAP 接続に使用する LDAP ユーザーの識別名（このユーザーは LDAP サーバー上のアカウントを検索/一覧表示できる必要があります）。例: `cn=ldap_reader,dc=example,dc=com`。定義されていない場合は、匿名バインドが使用されます。
* `OVERLEAF_LDAP_BIND_CREDENTIALS`
  * 用のパスワード `OVERLEAF_LDAP_BIND_DN`.
* `OVERLEAF_LDAP_BIND_PROPERTY`
  * クライアントに対してバインドするユーザーのプロパティ。デフォルト: `dn`.
* `OVERLEAF_LDAP_SEARCH_BASE` **(必須)**
  * ユーザー検索を開始するベース DN。例: `ou=people,dc=example,dc=com`.
* `OVERLEAF_LDAP_SEARCH_FILTER`
  * ユーザーを検索するための LDAP 検索フィルター。LDAP 検索に与えられたユーザー名を埋め込むには、リテラル '{{username}}' を使用してください。
    * 例: `(|(uid={{username}})(mail={{username}}))` (ユーザーはメールアドレスまたはログイン名でログインできます)。
    * 例: `(sAMAccountName={{username}})` (Active Directory)。
* `OVERLEAF_LDAP_SEARCH_SCOPE`
  * 検索のスコープは次のいずれかです `ベース`, `1階層`、または `サブツリー` (デフォルト)。
* `OVERLEAF_LDAP_SEARCH_ATTRIBUTES`
  * LDAP サーバーから取得する属性の JSON 配列。例: `["uid", "mail", "givenName", "sn"]`。デフォルトでは、すべての属性が取得されます。
* `OVERLEAF_LDAP_STARTTLS`
  * もし `true`、LDAP は TLS 経由で使用されます。
* `OVERLEAF_LDAP_TLS_OPTS_CA_PATH`
  * LDAP サーバーの SSL/TLS 証明書を検証するために使用する CA 証明書を含むファイルへのパス。証明書が複数ある場合は、証明書へのパスの JSON 配列にできます。ファイルは Docker コンテナからアクセス可能である必要があります。
    * 例（証明書 1 つ）: `/var/lib/overleaf/certs/ldap_ca_cert.pem`
    * 例（複数の証明書）: `["/var/lib/overleaf/certs/ldap_ca_cert1.pem", "/var/lib/overleaf/certs/ldap_ca_cert2.pem"]`
* `OVERLEAF_LDAP_TLS_OPTS_REJECT_UNAUTH`
  * もし `true`、サーバー証明書は指定された CA の一覧に対して検証されます。
* `OVERLEAF_LDAP_CACHE`
  * もし `true`、一度に最大 100 件の資格情報が 5 分間キャッシュされます。
* `OVERLEAF_LDAP_TIMEOUT`
  * クライアントが操作をタイムアウトするまで許容する時間（ミリ秒）。(デフォルト: Infinity)
* `OVERLEAF_LDAP_CONNECT_TIMEOUT`
  * クライアントが TCP 接続でタイムアウトするまで待機する時間（ミリ秒）。(デフォルト: OS の既定値)
* `OVERLEAF_LDAP_IS_ADMIN_ATT` および `OVERLEAF_LDAP_IS_ADMIN_ATT_VALUE`
  * 両方の環境変数が設定されている場合、ログイン処理は次を更新します `user.isAdmin = true` LDAP プロファイルに次で指定された属性が含まれている場合 `OVERLEAF_LDAP_IS_ADMIN_ATT` その値が次のいずれかに一致する場合 `OVERLEAF_LDAP_IS_ADMIN_ATT_VALUE` または、次を含む配列である場合 `OVERLEAF_LDAP_IS_ADMIN_ATT_VALUE`、それ以外の場合 `user.isAdmin` は次に設定されます `false`。これらの変数のいずれかが設定されていない場合、管理者ステータスは次にのみ設定されます `true` Launchpad で管理者ユーザーを作成するとき。

以下の 5 つの変数は、ユーザーの連絡先を LDAP サーバーからどのように取得するかを設定するために使用されます。

* `OVERLEAF_LDAP_CONTACTS_FILTER`
  * 連絡先に読み込むために LDAP サーバー内のユーザーを検索する際に使用するフィルターです。フィルター内のプレースホルダー '{{userProperty}}' は、次で指定されたプロパティの値に置き換えられます `OVERLEAF_LDAP_CONTACTS_PROPERTY` 検索を開始した LDAP ユーザーから。定義されていない場合、LDAP サーバーから連絡先へのユーザー取得は行われません。
* `OVERLEAF_LDAP_CONTACTS_SEARCH_BASE`
  * 連絡先の検索を開始するベース DN を指定します。デフォルト: `OVERLEAF_LDAP_SEARCH_BASE`.
* `OVERLEAF_LDAP_CONTACTS_SEARCH_SCOPE`
  * 検索のスコープは次のいずれかです `ベース`, `1階層`、または `サブツリー` (デフォルト)。
* `OVERLEAF_LDAP_CONTACTS_PROPERTY`
  * 次の '{{userProperty}}' プレースホルダーを置き換えるユーザーオブジェクトのプロパティを指定します `OVERLEAF_LDAP_CONTACTS_FILTER`.
* `OVERLEAF_LDAP_CONTACTS_NON_LDAP_VALUE`
  * 次の値を指定します `OVERLEAF_LDAP_CONTACTS_PROPERTY` 検索が非 LDAP ユーザーによって開始された場合に使用します。この変数が定義されていない場合、結果のフィルターは何にも一致しません。値 `*` はワイルドカードとして使用できます。

<details>

<summary><strong>例</strong></summary>

```
OVERLEAF_LDAP_CONTACTS_FILTER=(gidNumber={{userProperty}})
OVERLEAF_LDAP_CONTACTS_PROPERTY=gidNumber
OVERLEAF_LDAP_CONTACTS_NON_LDAP_VALUE=1000
```

上記の例では、現在の LDAP ユーザーの連絡先に、同じ UNIX `gid`。非 LDAP ユーザーの連絡先には、UNIX `gid=1000` の LDAP ユーザーがすべて追加されます。

</details>

<details>

<summary><strong>variables.env のサンプルファイル</strong></summary>

```
OVERLEAF_APP_NAME="私たちの Overleaf インスタンス"

ENABLED_LINKED_FILE_TYPES=project_file,project_output_file,url

# ImageMagick を使用したサムネイル生成を有効にします
ENABLE_CONVERSIONS=true

# メール確認の要件を無効にします
EMAIL_CONFIRMATION_DISABLED=true

## Nginx
# NGINX_WORKER_PROCESSES=4
# NGINX_WORKER_CONNECTIONS=768

## nginx-proxy 経由の TLS 用に設定
# OVERLEAF_BEHIND_PROXY=true
# OVERLEAF_SECURE_COOKIE=true

OVERLEAF_SITE_URL=http://my-overleaf-instance.com
OVERLEAF_NAV_TITLE=私たちの Overleaf インスタンス
# OVERLEAF_HEADER_IMAGE_URL=http://somewhere.com/mylogo.png
OVERLEAF_ADMIN_EMAIL=support@example.com

OVERLEAF_LEFT_FOOTER=[{"text": "サポートチームに連絡する", "url": "mailto:support@example.com"}]
OVERLEAF_RIGHT_FOOTER=[{"text":"こんにちは、私は右側です", "url":"https://github.com/yu-i-i/overleaf-cep"}]

OVERLEAF_EMAIL_FROM_ADDRESS=team@example.com
OVERLEAF_EMAIL_SMTP_HOST=smtp.example.com
OVERLEAF_EMAIL_SMTP_PORT=587
OVERLEAF_EMAIL_SMTP_SECURE=false
# OVERLEAF_EMAIL_SMTP_USER=
# OVERLEAF_EMAIL_SMTP_PASS=
# OVERLEAF_EMAIL_SMTP_NAME=
OVERLEAF_EMAIL_SMTP_LOGGER=false
OVERLEAF_EMAIL_SMTP_TLS_REJECT_UNAUTH=true
OVERLEAF_EMAIL_SMTP_IGNORE_TLS=false
OVERLEAF_CUSTOM_EMAIL_FOOTER=このシステムは x 部門によって運用されています

OVERLEAF_PROXY_LEARN=true
NAV_HIDE_POWERED_BY=true

#################
## CE 向け LDAP ##
#################

EXTERNAL_AUTH=ldap
OVERLEAF_LDAP_URL=ldap://ldap.example.com:389
OVERLEAF_LDAP_STARTTLS=true
OVERLEAF_LDAP_TLS_OPTS_CA_PATH=/var/lib/overleaf/certs/ldap_ca_cert.pem
OVERLEAF_LDAP_SEARCH_BASE=ou=people,dc=example,dc=com
OVERLEAF_LDAP_SEARCH_FILTER=(|(uid={{username}})(mail={{username}}))
OVERLEAF_LDAP_BIND_DN=cn=ldap_reader,dc=example,dc=com
OVERLEAF_LDAP_BIND_CREDENTIALS=GoodNewsEveryone
OVERLEAF_LDAP_EMAIL_ATT=mail
OVERLEAF_LDAP_FIRST_NAME_ATT=givenName
OVERLEAF_LDAP_LAST_NAME_ATT=sn
# OVERLEAF_LDAP_NAME_ATT=cn
OVERLEAF_LDAP_SEARCH_ATTRIBUTES=["uid", "sn", "givenName", "mail"]

OVERLEAF_LDAP_UPDATE_USER_DETAILS_ON_LOGIN=true

OVERLEAF_LDAP_PLACEHOLDER='ユーザー名またはメールアドレス'

OVERLEAF_LDAP_IS_ADMIN_ATT=mail
OVERLEAF_LDAP_IS_ADMIN_ATT_VALUE=admin@example.com

OVERLEAF_LDAP_CONTACTS_FILTER=(gidNumber={{userProperty}})
OVERLEAF_LDAP_CONTACTS_PROPERTY=gidNumber
OVERLEAF_LDAP_CONTACTS_NON_LDAP_VALUE='*'
```

</details>


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://ayakaleaf-pro.ayaka.space/on-premises/ja/she-ding/overleaf-toolkit/authentication/ldap-authentication.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
