Skip to main content
此功能由 yu-i-i/overleaf-cep 開發。這裡提供一些文件供您進行設定時參考。

設定

Overleaf SAML 模組內部使用 passport-saml 函式庫,以下大部分設定選項都會直接傳遞給 passport-saml。如果您在設定 SAML 時遇到問題,建議閱讀 passport-saml 的 README,以了解它所需的設定方式。 必須設定環境變數 EXTERNAL_AUTH 才能啟用 SAML 驗證模組。此環境變數用於指定要啟用哪些外部驗證方式,其值為一個清單。如果清單中包含 saml,就會啟用 SAML 驗證。 例如:EXTERNAL_AUTH=ldap saml 使用 SAML 驗證方式時,使用者會被重新導向至身分識別提供者(IdP)的驗證網站。若 IdP 成功驗證使用者,系統便會在 Overleaf 使用者資料庫中檢查是否存在包含如下結構之 samlIdentifiers 欄位的記錄:
externalUserId 必須與 IdP 伺服器回傳之使用者個人資料中,由 userIdAttribute 所指定之屬性的值相符。 如果找不到相符的記錄,系統會在資料庫中搜尋主要電子郵件地址與 IdP 使用者個人資料中電子郵件相符的使用者:
  • 如果找到這樣的使用者,就會刪除其 hashedPassword 欄位以停用本機驗證,並新增 samlIdentifiers 欄位。
  • 如果找不到相符的使用者,則會使用 IdP 個人資料中的電子郵件地址與 samlIdentifiers 建立新使用者。
注意:目前僅支援一個 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 (必要)
    • 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 (必要)
    • 簽發者(Issuer)名稱。
  • OVERLEAF_SAML_AUDIENCE
    • 預期的 SAML 回應 Audience,預設為 OVERLEAF_SAML_ISSUER 的值。
  • OVERLEAF_SAML_IDP_CERT (必要)
    • 包含身分識別提供者公開憑證之檔案的路徑,用於驗證傳入 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 端點就必須提供此項。可以提供由憑證路徑組成的 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
  • 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 在回應中附加哪個屬性集(連結)。
  • 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 範例:
請記下憑證、AssertionConsumerService.Location、SingleLogoutService.Location 與 EntityDescriptor.entityID,並在您的 IdP 設定中進行適當設定,或將 Metadata 檔案傳送給 IdP 管理員。

逐步教學:goauthentik

本節將逐步說明一套已在 goauthentik 上測試過的設定。請將 https://overleaf.example.com 替換為您的 OVERLEAF_SITE_URL,並將 https://authentik.example.com 替換為您的 Authentik 位址。
1

建立提供者與應用程式

在 Authentik 中,開啟 Applications > Applications,點選 New Application。精靈會同時建立應用程式及其提供者。1. 為應用程式指定名稱與 slug,例如 overleaf,然後點選 Next:

Authentik:應用程式的名稱與 slug

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日