Overleaf는 비교적 오래된 passport-ldapauth 라이브러리를 사용하므로 LDAP 호환성을 완전히 보장할 수 없습니다. 일부 LDAP ID 제공자(예: https://goauthentik.io/)에서는 로그인 실패가 발생할 수 있습니다. 따라서 가능하다면 OAuth/SAML 방식을 우선 사용하는 것을 권장합니다. goauthentik의 경우 아래의 테스트를 거친 단계별 안내: goauthentik을 따르세요.
LDAP는 외부 신원 확인에 사용되는 인증 프로토콜입니다. Overleaf Server Pro는 웹 인터페이스에서 표준 인증 방식과는 별도로 전용 LDAP 로그인 양식을 제공합니다. 사용자가 LDAP 사용자 이름과 비밀번호를 제출하면 Overleaf 백엔드는 구성된 LDAP 서버(예: ldap://ldap:10389)를 통해 자격 증명을 검증합니다.
Overleaf LDAP는 내부적으로 passport-ldapauth 라이브러리를 사용합니다. 대부분의 구성 옵션은 passport-ldapauth를 구성하는 데 사용되는 server 구성 객체로 전달됩니다. LDAP 구성에 문제가 있다면 passport-ldapauth의 README를 읽고 어떤 구성을 기대하는지 파악해 보는 것이 좋습니다.LDAP 인증 모듈을 활성화하려면 EXTERNAL_AUTH 환경 변수가 필요합니다. 이 환경 변수는 활성화할 외부 인증 방식을 지정하며, 값은 목록 형식입니다. 목록에 ldap이 포함되어 있으면 LDAP 인증이 활성화됩니다.예: EXTERNAL_AUTH=ldap samlOverleaf CEP와 달리 ayaka-notes 에디션에서는 LDAP 인증을 순수한 인증 방식으로만 제한하며, http://your-overleaf.com/ldap/login에서 사용할 수 있습니다.LDAP 인증 방식을 사용할 때 사용자가 로그인 양식에 username과 password를 입력하면 다음이 시도됩니다.
OVERLEAF_LDAP_SEARCH_FILTER로 정의된 필터를 사용해 LDAP 디렉터리에서 LDAP 사용자를 검색하고 인증합니다.
인증에 성공하면 Overleaf 사용자 데이터베이스에서 인증된 LDAP 사용자의 이메일 주소와 일치하는 기본 이메일 주소를 가진 사용자를 확인합니다.
일치하는 사용자가 있으면 해당 사용자의 hashedPassword 필드를 삭제합니다(있는 경우). 이렇게 하면 이후 해당 사용자는 LDAP 인증으로만 로그인할 수 있습니다.
일치하는 사용자가 없으면 LDAP 서버에서 가져온 이메일, 이름, 성을 사용해 새 Overleaf 사용자를 생성합니다.
LDAP로 로그인하는 사용자의 경우 Overleaf mongo 데이터베이스에 해시된 비밀번호를 저장하지 않으며, 기존 비밀번호가 있으면 제거합니다.
예(인증서 여러 개): ["/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 사용자가 표시됩니다.
variables.env 파일 샘플
OVERLEAF_APP_NAME="Our Overleaf Instance"ENABLED_LINKED_FILE_TYPES=project_file,project_output_file,url# Enables Thumbnail generation using ImageMagickENABLE_CONVERSIONS=true# Disables email confirmation requirementEMAIL_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=trueOVERLEAF_SITE_URL=http://my-overleaf-instance.comOVERLEAF_NAV_TITLE=Our Overleaf Instance# OVERLEAF_HEADER_IMAGE_URL=http://somewhere.com/mylogo.pngOVERLEAF_ADMIN_EMAIL=support@example.comOVERLEAF_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.comOVERLEAF_EMAIL_SMTP_HOST=smtp.example.comOVERLEAF_EMAIL_SMTP_PORT=587OVERLEAF_EMAIL_SMTP_SECURE=false# OVERLEAF_EMAIL_SMTP_USER=# OVERLEAF_EMAIL_SMTP_PASS=# OVERLEAF_EMAIL_SMTP_NAME=OVERLEAF_EMAIL_SMTP_LOGGER=falseOVERLEAF_EMAIL_SMTP_TLS_REJECT_UNAUTH=trueOVERLEAF_EMAIL_SMTP_IGNORE_TLS=falseOVERLEAF_CUSTOM_EMAIL_FOOTER=This system is run by department xOVERLEAF_PROXY_LEARN=trueNAV_HIDE_POWERED_BY=true################### LDAP for CE ###################EXTERNAL_AUTH=ldapOVERLEAF_LDAP_URL=ldap://ldap.example.com:389OVERLEAF_LDAP_STARTTLS=trueOVERLEAF_LDAP_TLS_OPTS_CA_PATH=/var/lib/overleaf/certs/ldap_ca_cert.pemOVERLEAF_LDAP_SEARCH_BASE=ou=people,dc=example,dc=comOVERLEAF_LDAP_SEARCH_FILTER=(|(uid={{username}})(mail={{username}}))OVERLEAF_LDAP_BIND_DN=cn=ldap_reader,dc=example,dc=comOVERLEAF_LDAP_BIND_CREDENTIALS=GoodNewsEveryoneOVERLEAF_LDAP_EMAIL_ATT=mailOVERLEAF_LDAP_FIRST_NAME_ATT=givenNameOVERLEAF_LDAP_LAST_NAME_ATT=sn# OVERLEAF_LDAP_NAME_ATT=cnOVERLEAF_LDAP_SEARCH_ATTRIBUTES=["uid", "sn", "givenName", "mail"]OVERLEAF_LDAP_UPDATE_USER_DETAILS_ON_LOGIN=trueOVERLEAF_LDAP_PLACEHOLDER='Username or email address'OVERLEAF_LDAP_IS_ADMIN_ATT=mailOVERLEAF_LDAP_IS_ADMIN_ATT_VALUE=admin@example.comOVERLEAF_LDAP_CONTACTS_FILTER=(gidNumber={{userProperty}})OVERLEAF_LDAP_CONTACTS_PROPERTY=gidNumberOVERLEAF_LDAP_CONTACTS_NON_LDAP_VALUE='*'
여기서는 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 아웃포스트(테스트 인스턴스)
OVERLEAF_LDAP_URL=ldap://ldap.example.com:389
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>을 사용하세요.
OVERLEAF_LDAP_BIND_DN=cn=ldapservice,ou=users,dc=example,dc=comOVERLEAF_LDAP_BIND_CREDENTIALS=<password of ldapservice>OVERLEAF_LDAP_SEARCH_BASE=ou=users,dc=example,dc=comOVERLEAF_LDAP_SEARCH_FILTER=(cn={{username}})
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:이 출력되어야 합니다:
관리자 플래그는 LDAP 로그인 때마다 업데이트됩니다. 속성이나 값이 잘못되면 LDAP으로 로그인하는 모든 관리자가 관리자 권한을 잃게 됩니다. 먼저 두 번째 관리자 계정으로 매핑을 테스트하세요.
goauthentik용으로 테스트된 variables.env
variables.env
EXTERNAL_AUTH=ldapOVERLEAF_LDAP_IDENTITY_SERVICE_NAME=Log in with AuthentikOVERLEAF_LDAP_URL=ldap://ldap.example.com:389OVERLEAF_LDAP_BIND_DN=cn=ldapservice,ou=users,dc=example,dc=comOVERLEAF_LDAP_BIND_CREDENTIALS=<password of ldapservice>OVERLEAF_LDAP_SEARCH_BASE=ou=users,dc=example,dc=comOVERLEAF_LDAP_SEARCH_FILTER=(cn={{username}})OVERLEAF_LDAP_EMAIL_ATT=mailOVERLEAF_LDAP_NAME_ATT=nameOVERLEAF_LDAP_IS_ADMIN_ATT=memberOfOVERLEAF_LDAP_IS_ADMIN_ATT_VALUE=cn=Admins,ou=groups,dc=example,dc=comOVERLEAF_LDAP_UPDATE_USER_DETAILS_ON_LOGIN=true
마지막 수정일 2026년 10월 6일
이 페이지가 도움이 되었나요?
Assistant
Responses are generated using AI and may contain mistakes.