> ## 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，以了解它所需的設定方式。

必須設定環境變數 `EXTERNAL_AUTH` 才能啟用 SAML 驗證模組。此環境變數用於指定要啟用哪些外部驗證方式，其值為一個清單。如果清單中包含 `saml`，就會啟用 SAML 驗證。

例如：`EXTERNAL_AUTH=ldap saml`

使用 SAML 驗證方式時，使用者會被重新導向至身分識別提供者（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`
  * 身分識別服務的顯示名稱，用於登入頁面（預設值：`Log in with SAML IdP`）。
* `OVERLEAF_SAML_USER_ID_FIELD`
  * 此屬性的值會被 Overleaf 用作外部使用者 ID，預設為 `nameID`。
* `OVERLEAF_SAML_EMAIL_FIELD`
  * 使用者個人資料中電子郵件欄位的名稱，預設為 `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 身分識別服務的進入點 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 回應的簽章。若身分識別提供者有多個有效的簽署憑證，則可以是由憑證路徑組成的 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` 時，設定 [metadata 端點](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`
  * 包含 PEM 格式私密金鑰之檔案的路徑，此金鑰須與 `OVERLEAF_SAML_PUBLIC_CERT` 相符，用於簽署由 passport-saml 發送的驗證請求。
* `OVERLEAF_SAML_DECRYPTION_CERT`
  * 包含公開憑證之檔案的路徑，用於 [metadata 端點](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` 相符之私密金鑰的檔案路徑，用於嘗試解密所收到的任何加密斷言（assertion）。
* `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`
  * 要向身分識別提供者請求的名稱識別碼格式（預設值：`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`
  * 要加入 AuthnRequest 的 `AttributeConsumingServiceIndex` 屬性，用於指示 IdP 在回應中附加哪個屬性集（[連結](http://blog.aniljohn.com/2014/01/data-minimization-front-channel-saml-attribute-requests.html)）。
* `OVERLEAF_SAML_AUTHN_CONTEXT`
  * 用於請求驗證情境（auth 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`，則不請求特定的驗證情境。例如，您可以將此項設為 `true`，以允許其他情境，例如無密碼登入（`urn:oasis:names:tc:SAML:2.0:ac:classes:X509`）。是否支援其他情境取決於您的 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 請求產生的請求 ID 的有效期限；超過此期限後，若在 SAML 回應的 `InResponseTo` 欄位中看到該 ID，將視為無效。預設值：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`。

**身分識別提供者的 Metadata**

目前版本的 Overleaf CE 包含一個用於取得服務提供者 Metadata 的端點：`http://my-overleaf-instance.com/saml/meta`

您需要設定身分識別提供者，使其將 Overleaf 伺服器識別為「服務提供者」（Service Provider）。設定方式請參閱您 SAML 伺服器的說明文件。

以下是合適的服務提供者 Metadata 範例：

<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 設定中進行適當設定，或將 Metadata 檔案傳送給 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\. 為應用程式指定名稱與 slug，例如 `overleaf`，然後點選 **Next**：

    <Frame caption="Authentik：應用程式的名稱與 slug">
      <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.