keySAML 身份验证

此功能由以下人员开发 yu-i-i/overleaf-ceparrow-up-right。这里我们为您的配置提供了一些文档。

配置

在内部,Overleaf 的 SAML 模块使用 passport-samlarrow-up-right 库,下面的大多数配置选项都会传递给 passport-saml。如果您在配置 SAML 时遇到问题,值得阅读 passport-saml 的 README,以了解它期望的配置。

环境变量 EXTERNAL_AUTH 需要启用 SAML 身份验证模块。此环境变量指定启用哪些外部身份验证方法。该变量的值是一个列表。如果列表中包含 saml 则会启用 SAML 身份验证。

例如: EXTERNAL_AUTH=ldap saml

使用 SAML 身份验证方法时,用户会被重定向到身份提供者 (IdP) 的身份验证站点。如果 IdP 成功验证用户,则会在 Overleaf 用户数据库中查找包含 samlIdentifiers 字段,其结构如下:

samlIdentifiers: [
  {
    externalUserId: "...",
    providerId: "1",
    userIdAttribute: "..."
  }
]

其中 externalUserId 必须匹配 IdP 服务器返回的用户配置文件中由 userIdAttribute 指定的属性的值。

如果未找到匹配的记录,则会在数据库中搜索主电子邮件地址与 IdP 用户配置文件中的电子邮件匹配的用户:

  • 如果找到这样的用户, hashedPassword 字段将被删除以禁用本地身份验证,并将添加 samlIdentifiers 字段。

  • 如果未找到匹配的用户,则会使用 IdP 配置文件中的电子邮件地址和 samlIdentifiers 创建一个新用户。

注意: 当前仅支持一个 SAML IdP。 providerId 字段在 samlIdentifiers 中固定为 '1'.

环境变量

  • OVERLEAF_SAML_IDENTITY_SERVICE_NAME

    • 身份服务的显示名称,用于登录页面(默认: 使用 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_namelast_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 (必需)

    • 发行者名称。

  • 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 请求的签名。当策略配置了 metadata endpointarrow-up-right 时需要 OVERLEAF_SAML_PRIVATE_KEY。可以提供证书路径的 JSON 数组以支持证书轮换。提供证书数组时,数组中的第一个条目应与当前的 OVERLEAF_SAML_PRIVATE_KEY匹配。数组中的其他条目可用于在更改 OVERLEAF_SAML_PRIVATE_KEY.

  • OVERLEAF_SAML_PRIVATE_KEY

    • 之前向 IdP 发布即将使用的证书。 OVERLEAF_SAML_PUBLIC_CERT 包含与用于对 passport-saml 发送的身份验证请求进行签名的

  • 匹配的 PEM 格式私钥的文件路径。

  • 包含公用证书的文件路径,用于

    • OVERLEAF_SAML_DECRYPTION_PVK 匹配的 PEM 格式私钥的文件路径。 包含与

  • 匹配的私钥的文件路径,该私钥将用于尝试解密接收到的任何加密断言。

    • 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_ID_FIELD

  • 环境变量,例如可以将其设置为用户的电子邮件地址。

    • OVERLEAF_SAML_ACCEPTED_CLOCK_SKEW_MS

  • 在检查 OnBefore 和 NotOnOrAfter 断言条件有效性时间戳时,客户端和服务器之间可接受的时钟偏差(以毫秒为单位)。设置为 -1 将完全禁用这些条件的检查。默认值为 0。

  • 链接

    • OVERLEAF_SAML_AUTHN_CONTEXT 要请求的身份验证上下文的名称标识符格式值的 JSON 数组。默认:.

  • ["urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport"]

    • OVERLEAF_SAML_FORCE_AUTHN true如果为

  • ,则服务提供者发出的初始 SAML 请求会指定 IdP 应强制重新验证用户,即使他们拥有有效会话。

    • OVERLEAF_SAML_FORCE_AUTHN trueOVERLEAF_SAML_DISABLE_REQUESTED_AUTHN_CONTEXT true ,则不请求特定的身份验证上下文。例如,您可以将此设置为以允许额外的上下文,例如无密码登录(urn:oasis:names:tc:SAML:2.0:ac:classes:X509

  • )。对额外上下文的支持取决于您的 IdP。

    • 如果设置为 OVERLEAF_SAML_AUTHN_REQUEST_BINDINGHTTP-POST

  • ,将通过 HTTP POST 绑定向 IdP 请求身份验证,否则默认为 HTTP-Redirect。

    • OVERLEAF_SAML_FORCE_AUTHN OVERLEAF_SAML_VALIDATE_IN_RESPONSE_TOalways

    • OVERLEAF_SAML_FORCE_AUTHN ,则将验证传入 SAML 响应中的 InResponseTo。never

    • OVERLEAF_SAML_FORCE_AUTHN ,则不会验证 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

  • 字段中被看到时不再有效的过期时间。默认: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 返回的配置文件包含由 指定的属性且其值匹配 要添加到“logout”请求的附加查询参数的 JSON 字典。 或为包含 OVERLEAF_SAML_IS_ADMIN_FIELD 的数组,则登录过程会将 OVERLEAF_SAML_IS_ADMIN_FIELDuser.isAdmin = true 否则将 user.isAdmin (默认)时,Overleaf 期望 SAML 断言或整个 SAML 身份验证响应由 IdP 签名。当两个选项都为设置为 true 。如果这两个变量中的任意一个未设置,则管理员状态仅在 Launchpad 中创建管理员用户时设置为

身份提供者的元数据 当前版本的 Overleaf CE 包含一个用于检索服务提供者元数据的端点:

http://my-overleaf-instance.com/saml/meta

需要在身份提供者中配置以识别 Overleaf 服务器为“服务提供者”。请参阅您的 SAML 服务器文档以获取如何执行此操作的说明。

chevron-right下面是一个适当的服务提供者元数据示例:hashtag

</EntityDescriptor> 请注意证书、, AssertionConsumerService.LocationSingleLogoutService.Location EntityDescriptor.entityID

chevron-right并在您的 IdP 配置中适当设置,或将元数据文件发送给 IdP 管理员。hashtag

最后更新于