Về mặt nội bộ, module SAML của Overleaf sử dụng thư viện passport-saml; hầu hết các tùy chọn cấu hình sau đây được truyền thẳng đến passport-saml. Nếu bạn gặp vấn đề khi cấu hình SAML, bạn nên đọc README của passport-saml để nắm được cấu hình mà thư viện này mong đợi.Biến môi trường EXTERNAL_AUTH là bắt buộc để bật module xác thực SAML. Biến môi trường này chỉ định những phương thức xác thực bên ngoài nào được kích hoạt. Giá trị của biến này là một danh sách. Nếu danh sách bao gồm saml thì xác thực SAML sẽ được kích hoạt.Ví dụ: EXTERNAL_AUTH=ldap samlKhi sử dụng phương thức xác thực SAML, người dùng sẽ được chuyển hướng đến trang xác thực của Nhà cung cấp định danh (IdP). Nếu IdP xác thực người dùng thành công, cơ sở dữ liệu người dùng Overleaf sẽ được kiểm tra để tìm bản ghi có trường samlIdentifiers với cấu trúc như sau:
externalUserId phải khớp với giá trị của thuộc tính được chỉ định bởi userIdAttribute trong hồ sơ người dùng do máy chủ IdP trả về.Nếu không tìm thấy bản ghi phù hợp, cơ sở dữ liệu sẽ được tìm kiếm để tìm người dùng có địa chỉ email chính khớp với email trong hồ sơ người dùng của IdP:
Nếu tìm thấy người dùng như vậy, trường hashedPassword sẽ bị xóa để vô hiệu hóa xác thực cục bộ, và trường samlIdentifiers sẽ được thêm vào.
Nếu không tìm thấy người dùng phù hợp, một người dùng mới sẽ được tạo với địa chỉ email và samlIdentifiers lấy từ hồ sơ IdP.
Lưu ý: Hiện tại chỉ hỗ trợ một IdP SAML. Trường providerId trong samlIdentifiers được cố định là '1'.
Tên hiển thị của dịch vụ định danh, được dùng trên trang đăng nhập (mặc định: Log in with SAML IdP).
OVERLEAF_SAML_USER_ID_FIELD
Giá trị của thuộc tính này sẽ được Overleaf dùng làm ID người dùng bên ngoài, mặc định là nameID.
OVERLEAF_SAML_EMAIL_FIELD
Tên của trường Email trong hồ sơ người dùng, mặc định là nameID.
OVERLEAF_SAML_FIRST_NAME_FIELD
Tên của trường firstName trong hồ sơ người dùng, mặc định là givenName.
OVERLEAF_SAML_LAST_NAME_FIELD
Tên của trường lastName trong hồ sơ người dùng, mặc định là lastName
OVERLEAF_SAML_UPDATE_USER_DETAILS_ON_LOGIN
Nếu được đặt thành true, các trường first_name và last_name của người dùng sẽ được cập nhật khi đăng nhập, và biểu mẫu thông tin người dùng trên trang /user/settings sẽ bị tắt.
OVERLEAF_SAML_ENTRYPOINT(bắt buộc)
URL điểm vào (entrypoint) của dịch vụ định danh SAML.
Ví dụ với Azure: https://login.microsoftonline.com/8b26b46a-6dd3-45c7-a104-f883f4db1f6b/saml2
OVERLEAF_SAML_ISSUER(bắt buộc)
Tên Issuer (bên phát hành).
OVERLEAF_SAML_AUDIENCE
Audience mong đợi trong phản hồi SAML, mặc định là giá trị của OVERLEAF_SAML_ISSUER.
OVERLEAF_SAML_IDP_CERT(bắt buộc)
Đường dẫn đến tệp chứa chứng chỉ công khai của Nhà cung cấp định danh, được dùng để xác thực chữ ký của các phản hồi SAML gửi đến. Nếu Nhà cung cấp định danh có nhiều chứng chỉ ký hợp lệ, giá trị này có thể là một mảng JSON chứa đường dẫn đến các chứng chỉ.
Đường dẫn đến tệp chứa chứng chỉ ký công khai được nhúng vào các yêu cầu xác thực để IdP có thể xác thực chữ ký của SAML Request gửi đến. Biến này là bắt buộc khi thiết lập endpoint metadata trong trường hợp strategy được cấu hình với OVERLEAF_SAML_PRIVATE_KEY. Có thể cung cấp một mảng JSON chứa đường dẫn đến các chứng chỉ để hỗ trợ xoay vòng chứng chỉ. Khi cung cấp một mảng chứng chỉ, mục đầu tiên trong mảng phải khớp với OVERLEAF_SAML_PRIVATE_KEY hiện tại. Các mục bổ sung trong mảng có thể được dùng để công bố trước các chứng chỉ sắp tới cho IdP trước khi thay đổi OVERLEAF_SAML_PRIVATE_KEY.
OVERLEAF_SAML_PRIVATE_KEY
Đường dẫn đến tệp chứa khóa riêng định dạng PEM tương ứng với OVERLEAF_SAML_PUBLIC_CERT, được dùng để ký các yêu cầu xác thực do passport-saml gửi đi.
OVERLEAF_SAML_DECRYPTION_CERT
Đường dẫn đến tệp chứa chứng chỉ công khai, được dùng cho endpoint metadata.
OVERLEAF_SAML_DECRYPTION_PVK
Đường dẫn đến tệp chứa khóa riêng tương ứng với OVERLEAF_SAML_DECRYPTION_CERT, sẽ được dùng để giải mã mọi assertion được mã hóa nhận được.
OVERLEAF_SAML_SIGNATURE_ALGORITHM
Tùy chọn đặt thuật toán chữ ký để ký các yêu cầu; các giá trị hợp lệ là ‘sha1’ (mặc định), ‘sha256’ (khuyến nghị), ‘sha512’ (bảo mật nhất, hãy kiểm tra xem IdP của bạn có hỗ trợ không).
OVERLEAF_SAML_ADDITIONAL_PARAMS
Từ điển JSON chứa các tham số truy vấn bổ sung sẽ được thêm vào tất cả các yêu cầu.
OVERLEAF_SAML_ADDITIONAL_AUTHORIZE_PARAMS
Từ điển JSON chứa các tham số truy vấn bổ sung sẽ được thêm vào các yêu cầu ‘authorize’.
Ví dụ: {"some_key": "some_value"}
OVERLEAF_SAML_IDENTIFIER_FORMAT
Định dạng định danh tên (name identifier) sẽ yêu cầu từ nhà cung cấp định danh (mặc định: urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress). Nếu sử dụng urn:oasis:names:tc:SAML:2.0:nameid-format:persistent, hãy đảm bảo biến môi trường OVERLEAF_SAML_EMAIL_FIELD đã được định nghĩa. Nếu cần dùng urn:oasis:names:tc:SAML:2.0:nameid-format:transient, bạn cũng phải định nghĩa biến môi trường OVERLEAF_SAML_USER_ID_FIELD, chẳng hạn có thể đặt thành địa chỉ email của người dùng.
OVERLEAF_SAML_ACCEPTED_CLOCK_SKEW_MS
Độ lệch thời gian (tính bằng mili giây) có thể chấp nhận giữa client và server khi kiểm tra tính hợp lệ của các mốc thời gian trong điều kiện assertion OnBefore và NotOnOrAfter. Đặt thành -1 sẽ tắt hoàn toàn việc kiểm tra các điều kiện này. Mặc định là 0.
OVERLEAF_SAML_ATTRIBUTE_CONSUMING_SERVICE_INDEX
Thuộc tính AttributeConsumingServiceIndex được thêm vào AuthnRequest để chỉ cho IdP biết tập thuộc tính nào cần đính kèm vào phản hồi (liên kết).
OVERLEAF_SAML_AUTHN_CONTEXT
Mảng JSON chứa các giá trị định dạng định danh tên để yêu cầu ngữ cảnh xác thực. Mặc định: ["urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport"].
OVERLEAF_SAML_FORCE_AUTHN
Nếu là true, yêu cầu SAML ban đầu từ nhà cung cấp dịch vụ sẽ chỉ định rằng IdP phải buộc người dùng xác thực lại, ngay cả khi họ đang có một phiên hợp lệ.
OVERLEAF_SAML_DISABLE_REQUESTED_AUTHN_CONTEXT
Nếu là true, không yêu cầu một ngữ cảnh xác thực cụ thể. Ví dụ, bạn có thể đặt giá trị này thành true để cho phép các ngữ cảnh bổ sung như đăng nhập không cần mật khẩu (urn:oasis:names:tc:SAML:2.0:ac:classes:X509). Việc hỗ trợ các ngữ cảnh bổ sung phụ thuộc vào IdP của bạn.
OVERLEAF_SAML_AUTHN_REQUEST_BINDING
Nếu được đặt thành HTTP-POST, sẽ yêu cầu xác thực từ IdP qua binding HTTP POST; nếu không, mặc định là HTTP-Redirect.
OVERLEAF_SAML_VALIDATE_IN_RESPONSE_TO
Nếu là always, InResponseTo sẽ được xác thực trong các phản hồi SAML gửi đến.
Nếu là never, InResponseTo sẽ không được xác thực (mặc định).
Nếu là ifPresent, InResponseTo chỉ được xác thực nếu có mặt trong phản hồi SAML gửi đến.
OVERLEAF_SAML_WANT_ASSERTIONS_SIGNED và OVERLEAF_SAML_WANT_AUTHN_RESPONSE_SIGNED
Khi được đặt thành true (mặc định), Overleaf yêu cầu các SAML Assertion, hoặc tương ứng là toàn bộ SAML Authentication Response, phải được IdP ký. Khi cả hai tùy chọn đều là false, ít nhất một trong hai (các assertion hoặc phản hồi) phải được ký.
OVERLEAF_SAML_REQUEST_ID_EXPIRATION_PERIOD_MS
Xác định thời gian hết hạn, sau đó một Request ID được tạo cho yêu cầu SAML sẽ không còn hợp lệ nếu xuất hiện trong trường InResponseTo của phản hồi SAML. Mặc định: 28800000 (8 giờ).
OVERLEAF_SAML_LOGOUT_URL
Địa chỉ cơ sở để gọi các yêu cầu đăng xuất (mặc định: entryPoint).
Từ điển JSON chứa các tham số truy vấn bổ sung sẽ được thêm vào các yêu cầu ‘logout’.
OVERLEAF_SAML_IS_ADMIN_FIELD và OVERLEAF_SAML_IS_ADMIN_FIELD_VALUE
Khi cả hai biến môi trường này đều được đặt, quá trình đăng nhập sẽ cập nhật user.isAdmin = true nếu hồ sơ do IdP SAML trả về chứa thuộc tính được chỉ định bởi OVERLEAF_SAML_IS_ADMIN_FIELD và giá trị của nó khớp với OVERLEAF_SAML_IS_ADMIN_FIELD_VALUE hoặc là một mảng có chứa OVERLEAF_SAML_IS_ADMIN_FIELD_VALUE; nếu không, user.isAdmin sẽ được đặt thành false. Nếu một trong hai biến này không được đặt, trạng thái quản trị viên chỉ được đặt thành true khi tạo người dùng quản trị trong Launchpad.
Metadata cho Nhà cung cấp định danhPhiên bản hiện tại của Overleaf CE có một endpoint để lấy Metadata của Nhà cung cấp dịch vụ (Service Provider): http://my-overleaf-instance.com/saml/metaNhà cung cấp định danh cần được cấu hình để nhận diện máy chủ Overleaf là một “Service Provider”. Hãy tham khảo tài liệu của máy chủ SAML của bạn để biết hướng dẫn cách thực hiện.Dưới đây là ví dụ về metadata phù hợp của Service Provider:
Hãy ghi lại các chứng chỉ, AssertionConsumerService.Location, SingleLogoutService.Location và EntityDescriptor.entityID rồi thiết lập cho phù hợp trong cấu hình IdP của bạn, hoặc gửi tệp metadata cho quản trị viên IdP.
Tệp variables.env mẫu (tối thiểu)
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################### SAML ###################EXTERNAL_AUTH=samlOVERLEAF_SAML_ISSUER=MyOverleafOVERLEAF_SAML_IDENTITY_SERVICE_NAME='Log in with SAML Provider'OVERLEAF_SAML_EMAIL_FIELD=EmailOVERLEAF_SAML_FIRST_NAME_FIELD=DisplayNameOVERLEAF_SAML_LAST_NAME_FIELD=DisplayNameOVERLEAF_SAML_ENTRYPOINT=http://localhost:18000/login/saml/authorize/admin/SAML_OverleafOVERLEAF_SAML_IDP_CERT=/var/lib/overleaf/certs/idp_cert.pemOVERLEAF_SAML_SIGNATURE_ALGORITHM=
Phần này hướng dẫn một cấu hình đã được kiểm thử với goauthentik. Hãy thay https://overleaf.example.com bằng OVERLEAF_SITE_URL của bạn và https://authentik.example.com bằng địa chỉ Authentik của bạn.
1
Tạo provider và application
Trong Authentik, mở Applications > Applications và nhấp New Application. Trình hướng dẫn sẽ tạo application cùng với provider của nó.1. Đặt tên và slug cho application, ví dụ overleaf, rồi nhấp Next:
Audience: một tên cho Overleaf, ví dụ overleaf. Overleaf gửi tên này dưới dạng OVERLEAF_SAML_ISSUER.
Authentik: provider SAML của application
4. Mở Advanced protocol settings và đặt:
Signing Certificate: một chứng chỉ, ví dụ authentik Self-signed Certificate
Sign assertions và Sign responses: bật cả hai
Service Provider Binding: Post
Authentik: ký và binding của một provider đã kiểm thử (phiên bản thử nghiệm)
5. Nhấp Next cho đến trang cuối cùng và gửi application.
2
Sao chép các giá trị từ trang provider
Mở lại provider. Mọi thứ Overleaf cần đều có trên trang tổng quan của nó:
Authentik: tổng quan của một provider SAML (phiên bản thử nghiệm)
Trên trang provider
Biến môi trường
SAML Endpoint
OVERLEAF_SAML_ENTRYPOINT và OVERLEAF_SAML_LOGOUT_URL
Audience
OVERLEAF_SAML_ISSUER
Download signing certificate (một tệp)
OVERLEAF_SAML_IDP_CERT, xem bước tiếp theo
EntityID/Issuer trong SAML Configuration là tên của chính Authentik. Đừng đặt nó vào OVERLEAF_SAML_ISSUER, hãy dùng Audience.
3
Cài đặt chứng chỉ ký
Nhấp Download trong Download signing certificate và lưu tệp dưới tên data/overleaf/certs/idp_cert.pem trong thư mục Toolkit của bạn. Container nhìn thấy tệp này là /var/lib/overleaf/certs/idp_cert.pem:
Các nhóm được gửi dưới dạng http://schemas.xmlsoap.org/claims/Group, là một danh sách. Để các thành viên của nhóm Authentik Admins trở thành quản trị viên Overleaf:
Cờ quản trị viên được cập nhật ở mỗi lần đăng nhập SAML. Nếu trường hoặc giá trị sai, mọi quản trị viên đăng nhập qua SAML sẽ mất quyền quản trị. Hãy thử nghiệm việc ánh xạ bằng một tài khoản quản trị viên thứ hai trước.
Tệp variables.env đã kiểm thử cho goauthentik
variables.env
EXTERNAL_AUTH=samlOVERLEAF_SAML_IDENTITY_SERVICE_NAME=Log in with AuthentikOVERLEAF_SAML_ENTRYPOINT=https://authentik.example.com/application/saml/overleaf/OVERLEAF_SAML_LOGOUT_URL=https://authentik.example.com/application/saml/overleaf/OVERLEAF_SAML_ISSUER=overleafOVERLEAF_SAML_IDP_CERT=/var/lib/overleaf/certs/idp_cert.pemOVERLEAF_SAML_WANT_ASSERTIONS_SIGNED=trueOVERLEAF_SAML_WANT_AUTHN_RESPONSE_SIGNED=trueOVERLEAF_SAML_USER_ID_FIELD=http://schemas.goauthentik.io/2021/02/saml/usernameOVERLEAF_SAML_EMAIL_FIELD=http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddressOVERLEAF_SAML_FIRST_NAME_FIELD=http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameOVERLEAF_SAML_LAST_NAME_FIELD=http://schemas.goauthentik.io/2021/02/saml/usernameOVERLEAF_SAML_IS_ADMIN_FIELD=http://schemas.xmlsoap.org/claims/GroupOVERLEAF_SAML_IS_ADMIN_FIELD_VALUE=AdminsOVERLEAF_SAML_UPDATE_USER_DETAILS_ON_LOGIN=true
Lần sửa đổi cuối 6 tháng 10, 2026
Trang này có hữu ích không?
Assistant
Responses are generated using AI and may contain mistakes.