Skip to main content
이 기능은 yu-i-i/overleaf-cep에서 개발되었습니다. 여기에서는 구성에 필요한 몇 가지 문서를 제공합니다.

구성

내부적으로 Overleaf SAML 모듈은 passport-saml 라이브러리를 사용하며, 다음 구성 옵션의 대부분은 passport-saml로 그대로 전달됩니다. SAML 구성에 문제가 있다면 passport-saml의 README를 읽어 이 라이브러리가 기대하는 구성을 파악해 보는 것이 좋습니다. SAML 인증 모듈을 활성화하려면 EXTERNAL_AUTH 환경 변수가 필요합니다. 이 환경 변수는 활성화할 외부 인증 방법을 지정합니다. 이 변수의 값은 목록입니다. 목록에 saml이 포함되어 있으면 SAML 인증이 활성화됩니다. 예: EXTERNAL_AUTH=ldap saml SAML 인증 방법을 사용하면 사용자는 Identity Provider(IdP) 인증 사이트로 리디렉션됩니다. IdP가 사용자를 성공적으로 인증하면, Overleaf 사용자 데이터베이스에서 다음과 같은 구조의 samlIdentifiers 필드를 포함하는 레코드를 확인합니다:
externalUserId는 IdP 서버가 반환한 사용자 프로필에서 userIdAttribute로 지정된 속성의 값과 일치해야 합니다. 일치하는 레코드가 없으면 IdP 사용자 프로필의 이메일과 일치하는 기본 이메일 주소를 가진 사용자를 데이터베이스에서 검색합니다:
  • 그런 사용자가 있으면 로컬 인증을 비활성화하기 위해 hashedPassword 필드가 삭제되고 samlIdentifiers 필드가 추가됩니다.
  • 일치하는 사용자가 없으면 IdP 프로필의 이메일 주소와 samlIdentifiers로 새 사용자가 생성됩니다.
참고: 현재는 하나의 SAML IdP만 지원됩니다. samlIdentifiers의 providerId 필드는 '1'로 고정되어 있습니다.

환경 변수

  • OVERLEAF_SAML_IDENTITY_SERVICE_NAME
    • 로그인 페이지에서 사용되는 ID 서비스의 표시 이름입니다(기본값: Log in with SAML IdP).
  • OVERLEAF_SAML_USER_ID_FIELD
    • 이 속성의 값은 Overleaf에서 외부 사용자 ID로 사용되며, 기본값은 nameID입니다.
  • OVERLEAF_SAML_EMAIL_FIELD
    • 사용자 프로필의 Email 필드 이름이며, 기본값은 nameID입니다.
  • OVERLEAF_SAML_FIRST_NAME_FIELD
    • 사용자 프로필의 firstName 필드 이름이며, 기본값은 givenName입니다.
  • OVERLEAF_SAML_LAST_NAME_FIELD
    • 사용자 프로필의 lastName 필드 이름이며, 기본값은 lastName입니다.
  • OVERLEAF_SAML_UPDATE_USER_DETAILS_ON_LOGIN
    • true로 설정하면 로그인 시 사용자의 first_name 및 last_name 필드를 업데이트하고, /user/settings 페이지의 사용자 정보 양식을 비활성화합니다.
  • OVERLEAF_SAML_ENTRYPOINT (필수)
    • SAML ID 서비스의 엔트리포인트 URL입니다.
      • 예: https://idp.example.com/simplesaml/saml2/idp/SSOService.php
      • Azure 예: https://login.microsoftonline.com/8b26b46a-6dd3-45c7-a104-f883f4db1f6b/saml2
  • OVERLEAF_SAML_ISSUER (필수)
    • Issuer 이름입니다.
  • OVERLEAF_SAML_AUDIENCE
    • 예상되는 SAML 응답 Audience이며, 기본값은 OVERLEAF_SAML_ISSUER의 값입니다.
  • OVERLEAF_SAML_IDP_CERT (필수)
    • 들어오는 SAML 응답의 서명을 검증하는 데 사용되는 Identity Provider 공개 인증서가 들어 있는 파일의 경로입니다. Identity Provider에 유효한 서명 인증서가 여러 개 있는 경우 인증서 경로의 JSON 배열로 지정할 수 있습니다.
      • 예(인증서 하나): /var/lib/overleaf/certs/idp_cert.pem
      • 예(인증서 여러 개): ["var/lib/overleaf/certs/idp_cert.pem", "/var/lib/overleaf/certs/idp_cert_old.pem"]
  • OVERLEAF_SAML_PUBLIC_CERT
    • IdP가 들어오는 SAML 요청의 서명을 검증할 수 있도록 인증 요청에 포함되는 공개 서명 인증서가 들어 있는 파일의 경로입니다. 전략이 OVERLEAF_SAML_PRIVATE_KEY로 구성된 경우 메타데이터 엔드포인트를 설정할 때 필요합니다. 인증서 교체를 지원하기 위해 인증서 경로의 JSON 배열을 제공할 수 있습니다. 인증서 배열을 제공하는 경우 배열의 첫 번째 항목은 현재 OVERLEAF_SAML_PRIVATE_KEY와 일치해야 합니다. 배열의 추가 항목은 OVERLEAF_SAML_PRIVATE_KEY를 변경하기 전에 향후 사용할 인증서를 IdP에 게시하는 데 사용할 수 있습니다.
  • OVERLEAF_SAML_PRIVATE_KEY
    • passport-saml이 보내는 인증 요청에 서명하는 데 사용되며, OVERLEAF_SAML_PUBLIC_CERT와 일치하는 PEM 형식 개인 키가 들어 있는 파일의 경로입니다.
  • OVERLEAF_SAML_DECRYPTION_CERT
  • OVERLEAF_SAML_DECRYPTION_PVK
    • 수신된 암호화된 어설션의 복호화를 시도하는 데 사용되며, OVERLEAF_SAML_DECRYPTION_CERT와 일치하는 개인 키가 들어 있는 파일의 경로입니다.
  • OVERLEAF_SAML_SIGNATURE_ALGORITHM
    • 요청 서명에 사용할 서명 알고리즘을 선택적으로 설정합니다. 유효한 값은 ‘sha1’(기본값), ‘sha256’(권장), ‘sha512’(가장 안전함, IdP가 지원하는지 확인 필요)입니다.
  • OVERLEAF_SAML_ADDITIONAL_PARAMS
    • 모든 요청에 추가할 쿼리 매개변수의 JSON 딕셔너리입니다.
  • OVERLEAF_SAML_ADDITIONAL_AUTHORIZE_PARAMS
    • ‘authorize’ 요청에 추가할 쿼리 매개변수의 JSON 딕셔너리입니다.
      • 예: {"some_key": "some_value"}
  • OVERLEAF_SAML_IDENTIFIER_FORMAT
    • Identity Provider에 요청할 이름 식별자 형식입니다(기본값: urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress). urn:oasis:names:tc:SAML:2.0:nameid-format:persistent를 사용하는 경우 OVERLEAF_SAML_EMAIL_FIELD 환경 변수가 정의되어 있는지 확인하세요. urn:oasis:names:tc:SAML:2.0:nameid-format:transient가 필요한 경우 OVERLEAF_SAML_USER_ID_FIELD 환경 변수도 정의해야 하며, 예를 들어 사용자의 이메일 주소로 설정할 수 있습니다.
  • OVERLEAF_SAML_ACCEPTED_CLOCK_SKEW_MS
    • OnBefore 및 NotOnOrAfter 어설션 조건의 유효성 타임스탬프를 확인할 때 클라이언트와 서버 간에 허용되는 시간 차이(밀리초)입니다. -1로 설정하면 이러한 조건 확인이 완전히 비활성화됩니다. 기본값은 0입니다.
  • OVERLEAF_SAML_ATTRIBUTE_CONSUMING_SERVICE_INDEX
    • IdP가 응답에 어떤 속성 집합을 첨부할지 지시하기 위해 AuthnRequest에 추가하는 AttributeConsumingServiceIndex 속성입니다(링크).
  • OVERLEAF_SAML_AUTHN_CONTEXT
    • 인증 컨텍스트를 요청할 이름 식별자 형식 값의 JSON 배열입니다. 기본값: ["urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport"].
  • OVERLEAF_SAML_FORCE_AUTHN
    • true이면 서비스 공급자의 초기 SAML 요청에서 사용자가 유효한 세션을 가지고 있더라도 IdP가 사용자를 강제로 재인증하도록 지정합니다.
  • OVERLEAF_SAML_DISABLE_REQUESTED_AUTHN_CONTEXT
    • true이면 특정 인증 컨텍스트를 요청하지 않습니다. 예를 들어 비밀번호 없는 로그인(urn:oasis:names:tc:SAML:2.0:ac:classes:X509) 같은 추가 컨텍스트를 허용하려면 이 값을 true로 설정할 수 있습니다. 추가 컨텍스트 지원 여부는 IdP에 따라 다릅니다.
  • OVERLEAF_SAML_AUTHN_REQUEST_BINDING
    • HTTP-POST로 설정하면 HTTP POST 바인딩을 통해 IdP에 인증을 요청하며, 그렇지 않으면 기본값인 HTTP-Redirect를 사용합니다.
  • OVERLEAF_SAML_VALIDATE_IN_RESPONSE_TO
    • always이면 들어오는 SAML 응답에서 InResponseTo를 검증합니다.
    • never이면 InResponseTo를 검증하지 않습니다(기본값).
    • ifPresent이면 들어오는 SAML 응답에 InResponseTo가 있는 경우에만 검증합니다.
  • OVERLEAF_SAML_WANT_ASSERTIONS_SIGNED 및 OVERLEAF_SAML_WANT_AUTHN_RESPONSE_SIGNED
    • true(기본값)로 설정하면 Overleaf는 각각 SAML 어설션 및 전체 SAML 인증 응답이 IdP에 의해 서명되어 있을 것으로 기대합니다. 두 옵션이 모두 false이면 어설션 또는 응답 중 적어도 하나는 서명되어 있어야 합니다.
  • OVERLEAF_SAML_REQUEST_ID_EXPIRATION_PERIOD_MS
    • SAML 요청에 대해 생성된 Request ID가 SAML 응답의 InResponseTo 필드에 나타났을 때 더 이상 유효하지 않게 되는 만료 시간을 정의합니다. 기본값: 28800000(8시간).
  • OVERLEAF_SAML_LOGOUT_URL
    • 로그아웃 요청 시 호출할 기본 주소입니다(기본값: entryPoint).
      • 예: https://idp.example.com/simplesaml/saml2/idp/SingleLogoutService.php
  • OVERLEAF_SAML_ADDITIONAL_LOGOUT_PARAMS
    • ‘logout’ 요청에 추가할 쿼리 매개변수의 JSON 딕셔너리입니다.
  • OVERLEAF_SAML_IS_ADMIN_FIELD 및 OVERLEAF_SAML_IS_ADMIN_FIELD_VALUE
    • 두 환경 변수가 모두 설정된 경우, SAML IdP가 반환한 프로필에 OVERLEAF_SAML_IS_ADMIN_FIELD로 지정한 속성이 있고 그 값이 OVERLEAF_SAML_IS_ADMIN_FIELD_VALUE와 일치하거나 OVERLEAF_SAML_IS_ADMIN_FIELD_VALUE를 포함하는 배열이면 로그인 과정에서 user.isAdmin = true로 업데이트되고, 그렇지 않으면 user.isAdmin이 false로 설정됩니다. 이 변수 중 하나라도 설정되지 않은 경우 관리자 상태는 Launchpad에서 관리자 사용자를 생성할 때만 true로 설정됩니다.
Identity Provider용 메타데이터 현재 버전의 Overleaf CE에는 Service Provider 메타데이터를 가져오는 엔드포인트가 포함되어 있습니다: http://my-overleaf-instance.com/saml/meta Identity Provider가 Overleaf 서버를 “Service Provider”로 인식하도록 구성해야 합니다. 구성 방법은 사용 중인 SAML 서버의 문서를 참조하세요. 다음은 적절한 Service Provider 메타데이터의 예시입니다:
인증서, AssertionConsumerService.Location, SingleLogoutService.Location, EntityDescriptor.entityID를 확인하여 IdP 구성에 적절히 설정하거나, 메타데이터 파일을 IdP 관리자에게 보내세요.

단계별 안내: goauthentik

여기서는 goauthentik에서 테스트를 거친 설정 과정을 단계별로 안내합니다. https://overleaf.example.com은 사용 중인 OVERLEAF_SITE_URL로, https://authentik.example.com은 사용 중인 Authentik의 주소로 바꾸세요.
1

공급자와 애플리케이션 만들기

Authentik에서 Applications > Applications를 열고 New Application을 클릭합니다. 마법사가 애플리케이션과 해당 공급자를 함께 만듭니다.1. 애플리케이션에 이름과 슬러그(예: overleaf)를 지정하고 Next를 클릭합니다:

Authentik: 애플리케이션의 이름과 슬러그

2. SAML Provider를 선택하고 Next를 클릭합니다:

Authentik: SAML 공급자 선택

3. 공급자 정보를 입력합니다:
  • Authorization Flow: default-provider-authorization-implicit-consent
  • ACS URL: https://overleaf.example.com/saml/login/callback
  • Audience: Overleaf를 나타내는 이름(예: overleaf). Overleaf는 이 값을 OVERLEAF_SAML_ISSUER로 보냅니다.

Authentik: 애플리케이션의 SAML 공급자

4. Advanced protocol settings를 열고 다음과 같이 설정합니다:
  • Signing Certificate: 인증서(예: authentik Self-signed Certificate)
  • Sign assertions 및 Sign responses: 둘 다 켬
  • Service Provider Binding: Post

Authentik: 테스트된 공급자의 서명 및 바인딩 설정(테스트 인스턴스)

5. 마지막 페이지까지 Next를 클릭한 다음 애플리케이션을 제출합니다.
2

공급자 페이지에서 값 복사하기

공급자를 다시 엽니다. Overleaf에 필요한 모든 정보가 개요에 있습니다:

Authentik: SAML 공급자 개요(테스트 인스턴스)

SAML Configuration 아래의 EntityID/Issuer는 Authentik 자체의 이름입니다. 이 값을 OVERLEAF_SAML_ISSUER에 넣지 말고 Audience를 사용하세요.
3

서명 인증서 설치하기

Download signing certificate 아래의 Download를 클릭하고 파일을 Toolkit 디렉터리의 data/overleaf/certs/idp_cert.pem으로 저장합니다. 컨테이너에서는 이 파일이 /var/lib/overleaf/certs/idp_cert.pem으로 보입니다:
4

속성 매핑하기

Authentik은 다음 이름으로 속성을 보냅니다:
그룹은 목록 형태의 http://schemas.xmlsoap.org/claims/Group으로 전달됩니다. Authentik 그룹 Admins의 구성원을 Overleaf 관리자로 만들려면 다음과 같이 설정합니다:
관리자 플래그는 SAML 로그인 때마다 업데이트됩니다. 필드나 값이 잘못되면 SAML로 로그인하는 모든 관리자가 관리자 권한을 잃게 됩니다. 먼저 두 번째 관리자 계정으로 매핑을 테스트하세요.
variables.env
마지막 수정일 2026년 10월 6일