Skip to main content
この機能は yu-i-i/overleaf-cep によって開発されました。ここでは設定のためのドキュメントを提供します。
Overleaf は passport-ldapauth ライブラリを使用していますが、これは比較的古いため、LDAP の互換性を完全には保証できません。一部の LDAP ID プロバイダー(例:https://goauthentik.io/)では、ログインに失敗する場合があります。そのため、可能であれば OAuth/SAML 方式を優先して使用することをおすすめします。goauthentik の場合は、動作確認済みの下記のステップバイステップ: goauthentikに従ってください。

LDAP とは

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

Server Pro における LDAP の例

設定

内部的に、Overleaf の LDAP は 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 ユーザーが作成されます。
LDAP でログインするユーザーについては、Overleaf の mongo データベースにハッシュ化されたパスワードを保存しません(既存のものは削除します)。

環境変数

  • OVERLEAF_LDAP_URL (必須)
    • 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 (必須)
    • ユーザーの検索を開始するベース 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 の値を指定します。この変数が定義されていない場合、結果のフィルターは何にも一致しません。値 * はワイルドカードとして使用できます。
上記の例では、現在の LDAP ユーザーの連絡先に、同じ UNIX gid を持つすべての LDAP ユーザーが読み込まれます。LDAP 以外のユーザーの連絡先には、UNIX gid=1000 を持つすべての LDAP ユーザーが含まれます。

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

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

バインド用アカウントを作成する

Overleaf はまず専用のアカウントでディレクトリにログインし、ユーザーを検索します。Authentik で Directory > Users を開き、New User をクリックして Internal User を選択し、Next をクリックします。ユーザー名(例:ldapservice)を入力し、Create をクリックします。

Authentik:バインド用アカウントを作成する

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

Authentik:バインド用アカウントのパスワードを設定する(テスト環境)

アドレスバーに表示されるユーザーの番号(例:…/#/identity/users/19 の 19)を控えておいてください。手順 3 で必要になります。
2

プロバイダーとアプリケーションを作成する

Applications > Applications を開き、New Application をクリックします。ウィザードによって、アプリケーションとそのプロバイダーが同時に作成されます。1. アプリケーションに名前とスラッグ(例:overleaf-ldap)を付け、Next をクリックします。

Authentik:アプリケーションの名前とスラッグ

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

Authentik:LDAP プロバイダーを選択する

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

Authentik:LDAP プロバイダーのバインドモードと検索モード

4. さらに下で、Bind Flow を default-authentication-flow に、Base DN をご自身の Base DN(例:dc=example,dc=com)に設定します。

Authentik:LDAP プロバイダーのバインドフローと Base DN

5. 最後のページまで Next をクリックし、アプリケーションを送信します。
3

バインド用アカウントにディレクトリの検索を許可する

この権限がないと、バインド用アカウントには自分自身しか見えず、検索でユーザーが見つからないため、すべての LDAP ログインが失敗します。プロバイダーを開き、Permissions に移動して Assign Role Object Permission をクリックします。Role に手順 1 で控えた番号を入力して ak-managed-role--user-<number> を選択し、Search full LDAP directory をオンにします。

Authentik:バインド用アカウントに検索権限を付与する(テスト環境)

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

Authentik:LDAP プロバイダーの権限(テスト環境)

4

LDAP アウトポストを実行する

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

Authentik:実行中の LDAP アウトポスト(テスト環境)

5

DN を入力する

プロバイダーのページには、Base DN と How to connect の下に例が表示されます。

Authentik:LDAP プロバイダーの概要(テスト環境)

例の値をそのままコピーしないでください。
  • Bind DN には、現在ログインしているアカウントが表示されます。代わりに手順 1 のバインド用アカウント cn=ldapservice,ou=users,<Base DN> を使用してください。
  • Search base には Base DN が表示されます。ou=users,<Base DN> を使用してください。
Authentik は ou=virtual-groups の下に、各ユーザーと同じ名前のグループを保持しています。Base DN 全体で (cn=alice) を検索すると、cn=alice,ou=users,… と cn=alice,ou=virtual-groups,… の両方が見つかり、Overleaf は複数のエントリに一致するログインを拒否します。検索ベースは ou=users,<Base DN> のままにしてください。
6

検索を確認する

Overleaf を起動する前に、Overleaf が行うのと同じ検索を実行してください。dn: がちょうど 1 つだけ出力される必要があります。
dn: がまったく出力されない場合は、通常、手順 3 の権限が不足しています。
7

管理者をマッピングする(任意)

ユーザーが所属するグループは、ou=groups の下の DN として memberOf に含まれます。Authentik のグループ Admins のメンバーを Overleaf の管理者にするには、次のように設定します。
管理者フラグは LDAP ログインのたびに更新されます。属性または値が誤っていると、LDAP でログインしたすべての管理者が管理者権限を失います。まず 2 つ目の管理者アカウントでマッピングをテストしてください。
variables.env
最終更新日 2026年10月6日