> ## 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.

# SAML 인증

<Info>
  이 기능은 [yu-i-i/overleaf-cep](https://github.com/yu-i-i/overleaf-cep)에서 개발되었습니다. 여기에서는 구성에 필요한 몇 가지 문서를 제공합니다.
</Info>

### 구성

내부적으로 Overleaf SAML 모듈은 [passport-saml](https://github.com/node-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` 필드를 포함하는 레코드를 확인합니다:

```json theme={null}
samlIdentifiers: [
  {
    externalUserId: "...",
    providerId: "1",
    userIdAttribute: "..."
  }
]
```

`externalUserId`는 IdP 서버가 반환한 사용자 프로필에서 `userIdAttribute`로 지정된 속성의 값과 일치해야 합니다.

일치하는 레코드가 없으면 IdP 사용자 프로필의 이메일과 일치하는 기본 이메일 주소를 가진 사용자를 데이터베이스에서 검색합니다:

* 그런 사용자가 있으면 로컬 인증을 비활성화하기 위해 `hashedPassword` 필드가 삭제되고 `samlIdentifiers` 필드가 추가됩니다.
* 일치하는 사용자가 없으면 IdP 프로필의 이메일 주소와 `samlIdentifiers`로 새 사용자가 생성됩니다.

<strong>참고:</strong> 현재는 하나의 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` <strong>(필수)</strong>
  * 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` <strong>(필수)</strong>
  * Issuer 이름입니다.
* `OVERLEAF_SAML_AUDIENCE`
  * 예상되는 SAML 응답 Audience이며, 기본값은 `OVERLEAF_SAML_ISSUER`의 값입니다.
* `OVERLEAF_SAML_IDP_CERT` <strong>(필수)</strong>
  * 들어오는 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`로 구성된 경우 [메타데이터 엔드포인트](https://github.com/yu-i-i/overleaf-cep/wiki/Extended-CE:-SAML-Authentication#metadata-for-the-identity-provider)를 설정할 때 필요합니다. 인증서 교체를 지원하기 위해 인증서 경로의 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`
  * [메타데이터 엔드포인트](https://github.com/yu-i-i/overleaf-cep/wiki/Extended-CE:-SAML-Authentication#metadata-for-the-identity-provider)에 사용되는 공개 인증서가 들어 있는 파일의 경로입니다.
* `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` 속성입니다([링크](http://blog.aniljohn.com/2014/01/data-minimization-front-channel-saml-attribute-requests.html)).
* `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 메타데이터의 예시입니다:

<Accordion title="ol-meta.xml">
  ```text theme={null}
  <?xml version="1.0"?>
  <EntityDescriptor xmlns="urn:oasis:names:tc:SAML:2.0:metadata"
                    xmlns:ds="http://www.w3.org/2000/09/xmldsig#"
                    entityID="MyOverleaf"
                    ID="_b508c83b7dda452f5b269383fb391107116f8f57">
    <SPSSODescriptor protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol" AuthnRequestsSigned="true" WantAssertionsSigned="true">
      <KeyDescriptor use="signing">
        <ds:KeyInfo>
          <ds:X509Data>
            <ds:X509Certificate>MII...
  [skipped]
  </ds:X509Certificate>
          </ds:X509Data>
        </ds:KeyInfo>
      </KeyDescriptor>
      <KeyDescriptor use="encryption">
        <ds:KeyInfo>
          <ds:X509Data>
            <ds:X509Certificate>MII...
  [skipped]
  </ds:X509Certificate>
          </ds:X509Data>
        </ds:KeyInfo>
        <EncryptionMethod Algorithm="http://www.w3.org/2009/xmlenc11#aes256-gcm"/>
        <EncryptionMethod Algorithm="http://www.w3.org/2009/xmlenc11#aes128-gcm"/>
        <EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#aes256-cbc"/>
        <EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#aes128-cbc"/>
      </KeyDescriptor>
      <SingleLogoutService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST"
                           Location="https://my-overleaf-instance.com/saml/logout/callback"/>
      <NameIDFormat>urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress</NameIDFormat>
      <AssertionConsumerService index="1"
                                isDefault="true"
                                Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST"
                                Location="https://my-overleaf-instance.com/saml/login/callback"/>
    </SPSSODescriptor>
  </EntityDescriptor>

  ```
</Accordion>

인증서, `AssertionConsumerService.Location`, `SingleLogoutService.Location`, `EntityDescriptor.entityID`를 확인하여 IdP 구성에 적절히 설정하거나, 메타데이터 파일을 IdP 관리자에게 보내세요.

<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

  #################
  ##     SAML    ##
  #################

  EXTERNAL_AUTH=saml
  OVERLEAF_SAML_ISSUER=MyOverleaf
  OVERLEAF_SAML_IDENTITY_SERVICE_NAME='Log in with SAML Provider'
  OVERLEAF_SAML_EMAIL_FIELD=Email
  OVERLEAF_SAML_FIRST_NAME_FIELD=DisplayName
  OVERLEAF_SAML_LAST_NAME_FIELD=DisplayName
  OVERLEAF_SAML_ENTRYPOINT=http://localhost:18000/login/saml/authorize/admin/SAML_Overleaf
  OVERLEAF_SAML_IDP_CERT=/var/lib/overleaf/certs/idp_cert.pem
  OVERLEAF_SAML_SIGNATURE_ALGORITHM=
  ```
</Accordion>

## 단계별 안내: goauthentik

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

<Steps>
  <Step title="공급자와 애플리케이션 만들기">
    Authentik에서 **Applications > Applications**를 열고 **New Application**을 클릭합니다. 마법사가 애플리케이션과 해당 공급자를 함께 만듭니다.

    1\. 애플리케이션에 이름과 슬러그(예: `overleaf`)를 지정하고 **Next**를 클릭합니다:

    <Frame caption="Authentik: 애플리케이션의 이름과 슬러그">
      <img src="https://mintcdn.com/ayakaleaf-pro/TjqwH4XzxYAkHStq/images/on-premises/saml-authentik-app.png?fit=max&auto=format&n=TjqwH4XzxYAkHStq&q=85&s=e2405f63578ab00991ad5046665eab32" alt="" width="1120" height="810" data-path="images/on-premises/saml-authentik-app.png" />
    </Frame>

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

    <Frame caption="Authentik: SAML 공급자 선택">
      <img src="https://mintcdn.com/ayakaleaf-pro/TjqwH4XzxYAkHStq/images/on-premises/saml-authentik-type.png?fit=max&auto=format&n=TjqwH4XzxYAkHStq&q=85&s=537780362698d5088132048754ac6481" alt="" width="1120" height="810" data-path="images/on-premises/saml-authentik-type.png" />
    </Frame>

    3\. 공급자 정보를 입력합니다:

    * **Authorization Flow**: `default-provider-authorization-implicit-consent`
    * **ACS URL**: `https://overleaf.example.com/saml/login/callback`
    * **Audience**: Overleaf를 나타내는 이름(예: `overleaf`). Overleaf는 이 값을 `OVERLEAF_SAML_ISSUER`로 보냅니다.

    <Frame caption="Authentik: 애플리케이션의 SAML 공급자">
      <img src="https://mintcdn.com/ayakaleaf-pro/TjqwH4XzxYAkHStq/images/on-premises/saml-authentik-create.png?fit=max&auto=format&n=TjqwH4XzxYAkHStq&q=85&s=4f15b87b90b355e13831b95c07abe427" alt="" width="1120" height="810" data-path="images/on-premises/saml-authentik-create.png" />
    </Frame>

    4\. **Advanced protocol settings**를 열고 다음과 같이 설정합니다:

    * **Signing Certificate**: 인증서(예: `authentik Self-signed Certificate`)
    * **Sign assertions** 및 **Sign responses**: 둘 다 켬
    * **Service Provider Binding**: `Post`

    <Frame caption="Authentik: 테스트된 공급자의 서명 및 바인딩 설정(테스트 인스턴스)">
      <img src="https://mintcdn.com/ayakaleaf-pro/TjqwH4XzxYAkHStq/images/on-premises/saml-authentik-advanced.png?fit=max&auto=format&n=TjqwH4XzxYAkHStq&q=85&s=39b136a219fb192ed42d337de0058166" alt="" width="1089" height="417" data-path="images/on-premises/saml-authentik-advanced.png" />
    </Frame>

    5\. 마지막 페이지까지 **Next**를 클릭한 다음 애플리케이션을 제출합니다.
  </Step>

  <Step title="공급자 페이지에서 값 복사하기">
    공급자를 다시 엽니다. Overleaf에 필요한 모든 정보가 개요에 있습니다:

    <Frame caption="Authentik: SAML 공급자 개요(테스트 인스턴스)">
      <img src="https://mintcdn.com/ayakaleaf-pro/TjqwH4XzxYAkHStq/images/on-premises/saml-authentik-provider.png?fit=max&auto=format&n=TjqwH4XzxYAkHStq&q=85&s=b73f3aa817b7a18286db6d810ab3b2e9" alt="" width="990" height="963" data-path="images/on-premises/saml-authentik-provider.png" />
    </Frame>

    | 공급자 페이지의 항목 | 환경 변수 |
    | - | - |
    | **SAML Endpoint** | `OVERLEAF_SAML_ENTRYPOINT` 및 `OVERLEAF_SAML_LOGOUT_URL` |
    | **Audience** | `OVERLEAF_SAML_ISSUER` |
    | **Download signing certificate**(파일) | `OVERLEAF_SAML_IDP_CERT`, 다음 단계 참조 |

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

  <Step title="서명 인증서 설치하기">
    **Download signing certificate** 아래의 **Download**를 클릭하고 파일을 Toolkit 디렉터리의 `data/overleaf/certs/idp_cert.pem`으로 저장합니다. 컨테이너에서는 이 파일이 `/var/lib/overleaf/certs/idp_cert.pem`으로 보입니다:

    ```dotenv theme={null}
    OVERLEAF_SAML_IDP_CERT=/var/lib/overleaf/certs/idp_cert.pem
    ```
  </Step>

  <Step title="속성 매핑하기">
    Authentik은 다음 이름으로 속성을 보냅니다:

    ```dotenv theme={null}
    OVERLEAF_SAML_USER_ID_FIELD=http://schemas.goauthentik.io/2021/02/saml/username
    OVERLEAF_SAML_EMAIL_FIELD=http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress
    OVERLEAF_SAML_FIRST_NAME_FIELD=http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name
    OVERLEAF_SAML_LAST_NAME_FIELD=http://schemas.goauthentik.io/2021/02/saml/username
    ```

    그룹은 목록 형태의 `http://schemas.xmlsoap.org/claims/Group`으로 전달됩니다. Authentik 그룹 `Admins`의 구성원을 Overleaf 관리자로 만들려면 다음과 같이 설정합니다:

    ```dotenv theme={null}
    OVERLEAF_SAML_IS_ADMIN_FIELD=http://schemas.xmlsoap.org/claims/Group
    OVERLEAF_SAML_IS_ADMIN_FIELD_VALUE=Admins
    ```

    <Warning>
      관리자 플래그는 SAML 로그인 때마다 업데이트됩니다. 필드나 값이 잘못되면 SAML로 로그인하는 모든 관리자가 관리자 권한을 잃게 됩니다. 먼저 두 번째 관리자 계정으로 매핑을 테스트하세요.
    </Warning>
  </Step>
</Steps>

<Accordion title="goauthentik용으로 테스트된 variables.env">
  ```dotenv title="variables.env" wrap theme={null}
  EXTERNAL_AUTH=saml
  OVERLEAF_SAML_IDENTITY_SERVICE_NAME=Log in with Authentik
  OVERLEAF_SAML_ENTRYPOINT=https://authentik.example.com/application/saml/overleaf/
  OVERLEAF_SAML_LOGOUT_URL=https://authentik.example.com/application/saml/overleaf/
  OVERLEAF_SAML_ISSUER=overleaf
  OVERLEAF_SAML_IDP_CERT=/var/lib/overleaf/certs/idp_cert.pem
  OVERLEAF_SAML_WANT_ASSERTIONS_SIGNED=true
  OVERLEAF_SAML_WANT_AUTHN_RESPONSE_SIGNED=true
  OVERLEAF_SAML_USER_ID_FIELD=http://schemas.goauthentik.io/2021/02/saml/username
  OVERLEAF_SAML_EMAIL_FIELD=http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress
  OVERLEAF_SAML_FIRST_NAME_FIELD=http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name
  OVERLEAF_SAML_LAST_NAME_FIELD=http://schemas.goauthentik.io/2021/02/saml/username
  OVERLEAF_SAML_IS_ADMIN_FIELD=http://schemas.xmlsoap.org/claims/Group
  OVERLEAF_SAML_IS_ADMIN_FIELD_VALUE=Admins
  OVERLEAF_SAML_UPDATE_USER_DETAILS_ON_LOGIN=true
  ```
</Accordion>


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