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는 웹 인터페이스에서 표준 인증 방식과는 별도로 전용 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. 인증에 성공하면 Overleaf 사용자 데이터베이스에서 인증된 LDAP 사용자의 이메일 주소와 일치하는 기본 이메일 주소를 가진 사용자를 확인합니다.
    • 일치하는 사용자가 있으면 해당 사용자의 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 사용자는 최소 하나의 이메일 주소를 가져야 합니다. 여러 주소가 제공되면 첫 번째 주소만 사용됩니다.
  • OVERLEAF_LDAP_FIRST_NAME_ATT
    • 애플리케이션에서 사용하는 사용자의 이름(first name)을 담은 속성 이름으로, 보통 givenName입니다.
  • OVERLEAF_LDAP_LAST_NAME_ATT
    • 애플리케이션에서 사용하는 사용자의 성(family name)을 담은 속성 이름으로, 보통 sn입니다.
  • OVERLEAF_LDAP_NAME_ATT
    • 사용자의 전체 이름을 담은 속성 이름으로, 보통 cn입니다. 앞의 두 변수 중 하나라도 정의되지 않은 경우 이 변수에서 사용자의 이름 및/또는 성을 추출합니다. 그렇지 않으면 사용되지 않습니다.
  • 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 사용자의 고유 이름(DN)입니다(이 사용자는 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
    • 클라이언트가 작업을 시간 초과 처리하기 전까지 유지하는 시간(ms)입니다(기본값: Infinity).
  • OVERLEAF_LDAP_CONNECT_TIMEOUT
    • 클라이언트가 TCP 연결을 시간 초과 처리하기 전까지 기다리는 시간(ms)입니다(기본값: 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로 설정됩니다.
다음 다섯 개의 변수는 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 입력하기

제공자 페이지의 How to connect 아래에 Base DN과 예시가 표시됩니다:

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:이 출력되어야 합니다:
dn:이 전혀 출력되지 않는다면 대개 3단계의 권한이 누락된 것입니다.
7

관리자 매핑하기(선택 사항)

사용자의 그룹은 memberOf에 ou=groups 아래의 DN으로 들어 있습니다. Authentik 그룹 Admins의 구성원을 Overleaf 관리자로 만들려면 다음과 같이 설정합니다:
관리자 플래그는 LDAP 로그인 때마다 업데이트됩니다. 속성이나 값이 잘못되면 LDAP으로 로그인하는 모든 관리자가 관리자 권한을 잃게 됩니다. 먼저 두 번째 관리자 계정으로 매핑을 테스트하세요.
variables.env
마지막 수정일 2026년 10월 6일