跳转到内容

单点登录

单点登录(SSO)让用户通过外部身份提供方登录 jvmguard,而不需要输入用户名和密码。jvmguard 支持任何兼容 OpenID Connect (OIDC) 的提供方,并为最常见的提供方提供预设。SSO 与现有的本地和 LDAP 身份验证并存,三种方式可以同时生效。

启用 SSO 后,登录页面会为每个配置的提供方显示一个额外的按钮。用户点击按钮,在身份提供方处完成身份验证, 然后被重定向回 jvmguard。如果用户获得授权,jvmguard 会以分配的访问级别创建会话。

SSO 客户端 ID 和密钥可以通过环境变量覆盖,请参阅 服务器配置

每个 SSO 提供方都要求在身份提供方的应用设置中注册一个重定向 URI。重定向 URI 的形式为:

http://<jvmguard-host>:<port>/login/oauth2/code/<slug>

其中 <slug> 是提供方显示名称转换为小写并将非字母数字字符替换为连字符后的结果。例如,名为 “Keycloak” 的提供方的重定向 URI 是 http://localhost:8020/login/oauth2/code/keycloak

此外,还必须注册登出重定向 URI http://<jvmguard-host>:<port>/login,以便 jvmguard 在用户于身份提供方 登出后将其重定向回登录页面。有些身份提供方称之为 “post logout redirect URI” 或 “allowed logout URL”。 如果未注册此 URI,用户登出时身份提供方会显示错误。

访问规则决定哪些用户可以通过某个 SSO 提供方登录,以及他们获得什么访问级别。访问规则列表为空意味着只有 预先创建的用户才能登录。这是默认也是最严格的模式。

可以添加匹配身份提供方 token 中组或角色声明的规则。每条规则将一个声明值映射到一个访问级别。一条显示为 * 的特殊兜底规则,匹配配置域中不匹配任何更具体规则的所有用户。每个提供方只允许一条兜底规则。

以下场景说明访问规则的工作方式:

  • 无规则:只有在 jvmguard 中预先创建的用户才能登录。其访问级别取自用户定义。
  • 特定组规则:token 中包含匹配组声明值的用户会以分配的访问级别自动创建。没有匹配组的用户会被拒绝, 除非同时配置了兜底规则。
  • 仅兜底规则:任何能在身份提供方处通过身份验证且满足域限制的用户,都会以兜底规则分配的访问级别 自动创建。
  • 特定规则加兜底规则:匹配特定组规则的用户获得该规则的更高访问级别。所有其他用户获得兜底规则的 访问级别。

Google Workspace 不通过 OpenID Connect 暴露组声明。对于 Google 提供方,访问规则仅限于一条适用于配置域中 所有人的兜底规则。

SSO 用户可以通过两种方式创建:

预先创建的用户:在“用户与角色”中创建一个类型为 “SSO” 的用户,并输入该用户在身份提供方处的电子邮件 地址。访问级别由管理员分配。用户首次登录时,jvmguard 匹配电子邮件地址,并将身份提供方的 subject 标识符 关联到该用户条目。

自动创建的用户:当某条访问规则匹配且不存在预先创建的用户时,jvmguard 会以匹配规则中的访问级别创建 一个新的用户条目。如果身份提供方 token 中有用户的全名,则会自动填入。

用户无论是手动还是自动创建的,之后都可以随时在“用户与角色”中更改访问级别。更改在下次登录时生效。

SSO 不取代本地或 LDAP 身份验证。三种方式可以同时生效。每个用户 只有一个用户类型:“本地”、“LDAP” 或 “SSO”。用户类型决定用户的认证方式。

创建为“本地”或 “LDAP” 的用户无法通过 SSO 按钮登录,即使在身份提供方处使用相同的电子邮件地址。反过来, “SSO” 用户无法用密码登录,因为该用户类型不存储密码。

要将用户从一种认证方式迁移到另一种,请在“用户与角色”中更改用户类型。注意,当前已登录的现有用户无法被 删除。