> ## Documentation Index
> Fetch the complete documentation index at: https://ayakaleaf-pro.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# LDAP 認証

<Info>
  この機能は [yu-i-i/overleaf-cep](https://github.com/yu-i-i/overleaf-cep) によって開発されました。ここでは設定のためのドキュメントを提供します。
</Info>

<Warning>
  Overleaf は **passport-ldapauth** ライブラリを使用していますが、これは比較的古いため、LDAP の互換性を完全には保証できません。一部の LDAP ID プロバイダー（例：[https://goauthentik.io/](https://goauthentik.io/)）では、ログインに失敗する場合があります。そのため、可能であれば OAuth/SAML 方式を優先して使用することをおすすめします。goauthentik の場合は、動作確認済みの下記の[ステップバイステップ: goauthentik](/ja/on-premises/configuration/overleaf-toolkit/authentication/ldap-authentication)に従ってください。
</Warning>

### LDAP とは

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

<Frame caption="Server Pro における LDAP の例">
  <img src="https://mintcdn.com/ayakaleaf-pro/x9kfDjtWlyyhG_mR/images/on-premises/image-29.png?fit=max&auto=format&n=x9kfDjtWlyyhG_mR&q=85&s=f3ebcacecec45115cf9b1fa55eb1ba94" alt="" width="2804" height="2005" data-path="images/on-premises/image-29.png" />
</Frame>

### 設定

内部的に、Overleaf の LDAP は [passport-ldapauth](https://github.com/vesse/passport-ldapauth) ライブラリを使用しています。これらの設定オプションのほとんどは、`passport-ldapauth` の設定に使われる `server` 設定オブジェクトにそのまま渡されます。LDAP の設定で問題が発生した場合は、`passport-ldapauth` の README を読んで、想定されている設定を把握しておくとよいでしょう。

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

例：`EXTERNAL_AUTH=ldap saml`

Overleaf CEP とは異なり、ayaka-notes エディションでは LDAP 認証を純粋な認証方式に限定しており、`http://your-overleaf.com/ldap/login` で利用できます。

LDAP 認証方式を使用する場合、ユーザーがログインフォームに `username` と `password` を入力すると、次の処理が試行されます。

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

<Danger>
  LDAP でログインするユーザーについては、Overleaf の mongo データベースにハッシュ化されたパスワードを保存しません（既存のものは削除します）。
</Danger>

#### 環境変数

* `OVERLEAF_LDAP_URL` <strong>（必須）</strong>
  * LDAP サーバーの URL。
    * 例：`ldaps://ldap.example.com:636`（LDAP over SSL）
    * 例：`ldap://ldap.example.com:389`（暗号化なし、または設定されている場合は STARTTLS）。
* `OVERLEAF_LDAP_IDENTITY_SERVICE_NAME`
  * ログインページで使用される、LDAP ID サービスの表示名。
  * デフォルトは `Log in with LDAP Provider` です。
* `OVERLEAF_LDAP_EMAIL_ATT`
  * LDAP サーバーから返されるメール属性。デフォルトは `mail` です。各 LDAP ユーザーは少なくとも 1 つのメールアドレスを持つ必要があります。複数のアドレスがある場合は、最初のもののみが使用されます。
* `OVERLEAF_LDAP_FIRST_NAME_ATT`
  * アプリケーションで使用されるユーザーの名（ファーストネーム）を保持するプロパティ名。通常は `givenName` です。
* `OVERLEAF_LDAP_LAST_NAME_ATT`
  * アプリケーションで使用されるユーザーの姓（ファミリーネーム）を保持するプロパティ名。通常は `sn` です。
* `OVERLEAF_LDAP_NAME_ATT`
  * ユーザーのフルネームを保持するプロパティ名。通常は `cn` です。前の 2 つの変数のいずれかが定義されていない場合、ユーザーの名および/または姓はこの変数から抽出されます。それ以外の場合は使用されません。
* `OVERLEAF_LDAP_PLACEHOLDER`
  * ログインフォームのプレースホルダー。デフォルトは `Username` です。
* `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` <strong>（必須）</strong>
  * ユーザーの検索を開始するベース DN。例：`ou=people,dc=example,dc=com`。
* `OVERLEAF_LDAP_SEARCH_FILTER`
  * ユーザーを検索するための LDAP 検索フィルター。リテラル '\{\{username}}' を使うと、指定されたユーザー名が LDAP 検索に埋め込まれます。
    * 例：`(|(uid={{username}})(mail={{username}}))`（ユーザーはメールアドレスまたはログイン名でログインできます）。
    * 例：`(sAMAccountName={{username}})`（Active Directory）。
* `OVERLEAF_LDAP_SEARCH_SCOPE`
  * 検索のスコープ。`base`、`one`、`sub`（デフォルト）のいずれかです。
* `OVERLEAF_LDAP_SEARCH_ATTRIBUTES`
  * LDAP サーバーから取得する属性の JSON 配列。例：`["uid", "mail", "givenName", "sn"]`。デフォルトではすべての属性が取得されます。
* `OVERLEAF_LDAP_STARTTLS`
  * `true` の場合、LDAP over 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`
  * 両方の環境変数が設定されている場合、LDAP プロファイルに `OVERLEAF_LDAP_IS_ADMIN_ATT` で指定された属性が含まれ、その値が `OVERLEAF_LDAP_IS_ADMIN_ATT_VALUE` と一致するか、`OVERLEAF_LDAP_IS_ADMIN_ATT_VALUE` を含む配列であれば、ログイン処理で `user.isAdmin = true` に更新されます。そうでなければ `user.isAdmin` は `false` に設定されます。いずれかの変数が設定されていない場合、管理者ステータスは Launchpad での管理者ユーザー作成時にのみ `true` に設定されます。

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

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

<Accordion title="例">
  ```text theme={null}
  OVERLEAF_LDAP_CONTACTS_FILTER=(gidNumber={{userProperty}})
  OVERLEAF_LDAP_CONTACTS_PROPERTY=gidNumber
  OVERLEAF_LDAP_CONTACTS_NON_LDAP_VALUE=1000
  ```

  上記の例では、現在の LDAP ユーザーの連絡先に、同じ UNIX `gid` を持つすべての LDAP ユーザーが読み込まれます。LDAP 以外のユーザーの連絡先には、UNIX `gid=1000` を持つすべての LDAP ユーザーが含まれます。
</Accordion>

<Accordion title="variables.env ファイルのサンプル">
  ```text theme={null}
  OVERLEAF_APP_NAME="Our Overleaf Instance"

  ENABLED_LINKED_FILE_TYPES=project_file,project_output_file,url

  # Enables Thumbnail generation using ImageMagick
  ENABLE_CONVERSIONS=true

  # Disables email confirmation requirement
  EMAIL_CONFIRMATION_DISABLED=true

  ## Nginx
  # NGINX_WORKER_PROCESSES=4
  # NGINX_WORKER_CONNECTIONS=768

  ## Set for TLS via nginx-proxy
  # OVERLEAF_BEHIND_PROXY=true
  # OVERLEAF_SECURE_COOKIE=true

  OVERLEAF_SITE_URL=http://my-overleaf-instance.com
  OVERLEAF_NAV_TITLE=Our Overleaf Instance
  # OVERLEAF_HEADER_IMAGE_URL=http://somewhere.com/mylogo.png
  OVERLEAF_ADMIN_EMAIL=support@example.com

  OVERLEAF_LEFT_FOOTER=[{"text": "Contact your support team", "url": "mailto:support@example.com"}]
  OVERLEAF_RIGHT_FOOTER=[{"text":"Hello, I am on the Right", "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=This system is run by department x

  OVERLEAF_PROXY_LEARN=true
  NAV_HIDE_POWERED_BY=true

  #################
  ## LDAP for CE ##
  #################

  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='Username or email address'

  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='*'
  ```
</Accordion>

## ステップバイステップ: goauthentik

ここでは、[goauthentik](https://goauthentik.io/) で動作確認済みのセットアップ手順を説明します。例では Base DN として `dc=example,dc=com` を使用しています。ご自身の値に置き換えてください。

<Steps>
  <Step title="バインド用アカウントを作成する">
    Overleaf はまず専用のアカウントでディレクトリにログインし、ユーザーを検索します。Authentik で **Directory > Users** を開き、**New User** をクリックして **Internal User** を選択し、**Next** をクリックします。ユーザー名（例：`ldapservice`）を入力し、**Create** をクリックします。

    <Frame caption="Authentik：バインド用アカウントを作成する">
      <img src="https://mintcdn.com/ayakaleaf-pro/TjqwH4XzxYAkHStq/images/on-premises/ldap-authentik-user-create.png?fit=max&auto=format&n=TjqwH4XzxYAkHStq&q=85&s=bf5d9a5aefd048781339157121a9e203" alt="" width="1120" height="810" data-path="images/on-premises/ldap-authentik-user-create.png" />
    </Frame>

    新しいユーザーを開き、**Set password** をクリックします。このパスワードを `OVERLEAF_LDAP_BIND_CREDENTIALS` に設定します。

    <div style={{ textAlign: "center" }}>
      <Frame caption="Authentik：バインド用アカウントのパスワードを設定する（テスト環境）">
        <img src="https://mintcdn.com/ayakaleaf-pro/TjqwH4XzxYAkHStq/images/on-premises/ldap-authentik-user-page.png?fit=max&auto=format&n=TjqwH4XzxYAkHStq&q=85&s=96aad0f919dc8e74fef5995b1dde1e78" alt="" width="207" data-path="images/on-premises/ldap-authentik-user-page.png" />
      </Frame>
    </div>

    アドレスバーに表示されるユーザーの番号（例：`…/#/identity/users/19` の `19`）を控えておいてください。手順 3 で必要になります。
  </Step>

  <Step title="プロバイダーとアプリケーションを作成する">
    **Applications > Applications** を開き、**New Application** をクリックします。ウィザードによって、アプリケーションとそのプロバイダーが同時に作成されます。

    1\. アプリケーションに名前とスラッグ（例：`overleaf-ldap`）を付け、**Next** をクリックします。

    <Frame caption="Authentik：アプリケーションの名前とスラッグ">
      <img src="https://mintcdn.com/ayakaleaf-pro/TjqwH4XzxYAkHStq/images/on-premises/ldap-authentik-app.png?fit=max&auto=format&n=TjqwH4XzxYAkHStq&q=85&s=0d3e6b54e9bf552bd81d8b1d6b722701" alt="" width="1120" height="810" data-path="images/on-premises/ldap-authentik-app.png" />
    </Frame>

    2\. **LDAP Provider** を選択し、**Next** をクリックします。

    <Frame caption="Authentik：LDAP プロバイダーを選択する">
      <img src="https://mintcdn.com/ayakaleaf-pro/TjqwH4XzxYAkHStq/images/on-premises/ldap-authentik-type.png?fit=max&auto=format&n=TjqwH4XzxYAkHStq&q=85&s=ee63f2682051572a08c1f5bc321a1af6" alt="" width="1120" height="810" data-path="images/on-premises/ldap-authentik-type.png" />
    </Frame>

    3\. **Bind Mode** を **Direct binding** に、**Search Mode** を **Direct querying** に設定します。

    <Frame caption="Authentik：LDAP プロバイダーのバインドモードと検索モード">
      <img src="https://mintcdn.com/ayakaleaf-pro/TjqwH4XzxYAkHStq/images/on-premises/ldap-authentik-modes.png?fit=max&auto=format&n=TjqwH4XzxYAkHStq&q=85&s=ea147f1605e76142021d07f775d5ef53" alt="" width="1120" height="810" data-path="images/on-premises/ldap-authentik-modes.png" />
    </Frame>

    4\. さらに下で、**Bind Flow** を `default-authentication-flow` に、**Base DN** をご自身の Base DN（例：`dc=example,dc=com`）に設定します。

    <Frame caption="Authentik：LDAP プロバイダーのバインドフローと Base DN">
      <img src="https://mintcdn.com/ayakaleaf-pro/TjqwH4XzxYAkHStq/images/on-premises/ldap-authentik-basedn.png?fit=max&auto=format&n=TjqwH4XzxYAkHStq&q=85&s=4ce418571d83294ee749d56b13c63d44" alt="" width="1120" height="810" data-path="images/on-premises/ldap-authentik-basedn.png" />
    </Frame>

    5\. 最後のページまで **Next** をクリックし、アプリケーションを送信します。
  </Step>

  <Step title="バインド用アカウントにディレクトリの検索を許可する">
    この権限がないと、バインド用アカウントには自分自身しか見えず、検索でユーザーが見つからないため、すべての LDAP ログインが失敗します。

    プロバイダーを開き、**Permissions** に移動して **Assign Role Object Permission** をクリックします。**Role** に手順 1 で控えた番号を入力して `ak-managed-role--user-<number>` を選択し、**Search full LDAP directory** をオンにします。

    <Frame caption="Authentik：バインド用アカウントに検索権限を付与する（テスト環境）">
      <img src="https://mintcdn.com/ayakaleaf-pro/TjqwH4XzxYAkHStq/images/on-premises/ldap-authentik-assign.png?fit=max&auto=format&n=TjqwH4XzxYAkHStq&q=85&s=5af53c691ae845adcb4ede42c24fb600" alt="" width="1120" height="529" data-path="images/on-premises/ldap-authentik-assign.png" />
    </Frame>

    すると、そのロールの **Search full LDAP directory** の欄にチェックマークが表示されます。

    <Frame caption="Authentik：LDAP プロバイダーの権限（テスト環境）">
      <img src="https://mintcdn.com/ayakaleaf-pro/TjqwH4XzxYAkHStq/images/on-premises/ldap-authentik-permissions.png?fit=max&auto=format&n=TjqwH4XzxYAkHStq&q=85&s=24ae7f0dfb6d19e1b3d6584d6ccf0f0b" alt="" width="990" height="488" data-path="images/on-premises/ldap-authentik-permissions.png" />
    </Frame>
  </Step>

  <Step title="LDAP アウトポストを実行する">
    Authentik は、別コンテナであるアウトポストを介して LDAP に応答します。**Applications > Outposts** を開き、ご自身のプロバイダーを指定して種類 **LDAP** のアウトポストを作成し、Authentik の説明に従ってデプロイします。アウトポストは、実行中のホストのポート 389 で待ち受けます。接続されると、緑色のチェックマークが表示されます。

    <Frame caption="Authentik：実行中の LDAP アウトポスト（テスト環境）">
      <img src="https://mintcdn.com/ayakaleaf-pro/TjqwH4XzxYAkHStq/images/on-premises/ldap-authentik-outposts.png?fit=max&auto=format&n=TjqwH4XzxYAkHStq&q=85&s=cd8af2f7df7b2df24d2369416509faef" alt="" width="990" height="468" data-path="images/on-premises/ldap-authentik-outposts.png" />
    </Frame>

    ```dotenv theme={null}
    OVERLEAF_LDAP_URL=ldap://ldap.example.com:389
    ```
  </Step>

  <Step title="DN を入力する">
    プロバイダーのページには、Base DN と **How to connect** の下に例が表示されます。

    <Frame caption="Authentik：LDAP プロバイダーの概要（テスト環境）">
      <img src="https://mintcdn.com/ayakaleaf-pro/TjqwH4XzxYAkHStq/images/on-premises/ldap-authentik-provider.png?fit=max&auto=format&n=TjqwH4XzxYAkHStq&q=85&s=9aa4b747f4c0f51533454a97d835c18c" alt="" width="990" height="773" data-path="images/on-premises/ldap-authentik-provider.png" />
    </Frame>

    例の値をそのままコピーしないでください。

    * **Bind DN** には、現在ログインしているアカウントが表示されます。代わりに手順 1 のバインド用アカウント `cn=ldapservice,ou=users,<Base DN>` を使用してください。
    * **Search base** には Base DN が表示されます。`ou=users,<Base DN>` を使用してください。

    ```dotenv theme={null}
    OVERLEAF_LDAP_BIND_DN=cn=ldapservice,ou=users,dc=example,dc=com
    OVERLEAF_LDAP_BIND_CREDENTIALS=<password of ldapservice>
    OVERLEAF_LDAP_SEARCH_BASE=ou=users,dc=example,dc=com
    OVERLEAF_LDAP_SEARCH_FILTER=(cn={{username}})
    ```

    <Warning>
      Authentik は `ou=virtual-groups` の下に、各ユーザーと同じ名前のグループを保持しています。Base DN 全体で `(cn=alice)` を検索すると、`cn=alice,ou=users,…` と `cn=alice,ou=virtual-groups,…` の両方が見つかり、Overleaf は複数のエントリに一致するログインを拒否します。検索ベースは `ou=users,<Base DN>` のままにしてください。
    </Warning>
  </Step>

  <Step title="検索を確認する">
    Overleaf を起動する前に、Overleaf が行うのと同じ検索を実行してください。`dn:` がちょうど 1 つだけ出力される必要があります。

    ```shell theme={null}
    ldapsearch -x -H ldap://ldap.example.com:389 \
      -D cn=ldapservice,ou=users,dc=example,dc=com -w '<password of ldapservice>' \
      -b ou=users,dc=example,dc=com '(cn=alice)' dn
    ```

    `dn:` がまったく出力されない場合は、通常、手順 3 の権限が不足しています。
  </Step>

  <Step title="管理者をマッピングする（任意）">
    ユーザーが所属するグループは、`ou=groups` の下の DN として `memberOf` に含まれます。Authentik のグループ `Admins` のメンバーを Overleaf の管理者にするには、次のように設定します。

    ```dotenv theme={null}
    OVERLEAF_LDAP_IS_ADMIN_ATT=memberOf
    OVERLEAF_LDAP_IS_ADMIN_ATT_VALUE=cn=Admins,ou=groups,dc=example,dc=com
    ```

    <Warning>
      管理者フラグは LDAP ログインのたびに更新されます。属性または値が誤っていると、LDAP でログインしたすべての管理者が管理者権限を失います。まず 2 つ目の管理者アカウントでマッピングをテストしてください。
    </Warning>
  </Step>
</Steps>

<Accordion title="goauthentik 用の動作確認済み variables.env">
  ```dotenv title="variables.env" wrap theme={null}
  EXTERNAL_AUTH=ldap
  OVERLEAF_LDAP_IDENTITY_SERVICE_NAME=Log in with Authentik
  OVERLEAF_LDAP_URL=ldap://ldap.example.com:389
  OVERLEAF_LDAP_BIND_DN=cn=ldapservice,ou=users,dc=example,dc=com
  OVERLEAF_LDAP_BIND_CREDENTIALS=<password of ldapservice>
  OVERLEAF_LDAP_SEARCH_BASE=ou=users,dc=example,dc=com
  OVERLEAF_LDAP_SEARCH_FILTER=(cn={{username}})
  OVERLEAF_LDAP_EMAIL_ATT=mail
  OVERLEAF_LDAP_NAME_ATT=name
  OVERLEAF_LDAP_IS_ADMIN_ATT=memberOf
  OVERLEAF_LDAP_IS_ADMIN_ATT_VALUE=cn=Admins,ou=groups,dc=example,dc=com
  OVERLEAF_LDAP_UPDATE_USER_DETAILS_ON_LOGIN=true
  ```
</Accordion>


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