每多一个单独的登录,就多一个需要重置的密码,也多一个员工离职时需要关闭的账户。SAML 单点登录(SSO)将您的学习管理系统与身份提供商连接起来,让人们用工作账户登录培训平台,访问权限则随您的目录而定。本文介绍 SAML 的工作原理、使用 Microsoft Entra ID、Okta 或 Google Workspace 的设置流程,以及上线前需要检查的事项。
SAML 单点登录的工作原理
SAML(Security Assertion Markup Language,安全断言标记语言)2.0 是一项开放标准,用于在两个互相信任的系统之间传递登录信息。LMS 永远看不到用户的密码:它把用户送到您的身份提供商,由后者核实用户身份(包括您要求的任何多重身份验证),然后带着一份签名声明将用户送回。
| 术语 | 含义 |
|---|---|
| 身份提供商(IdP) | 对您的人员进行身份验证的系统,例如 Entra ID、Okta 或 Google Workspace。 |
| 服务提供商(SP) | 人们登录的应用程序:您的 LMS。 |
| 断言(Assertion) | 来自 IdP 的签名 XML 声明:此人是谁、何时登录,以及电子邮件和姓名等属性。 |
| 实体 ID(Entity ID) | 双方各自的唯一名称,通常形如 URL,但仅仅是一个标识符。必须完全一致。 |
| ACS URL | Assertion Consumer Service URL:接收 IdP 响应的 LMS 地址。 |
| 签名证书 | IdP 用其私钥签名;LMS 用 IdP 的公钥证书验证,并拒绝伪造或被篡改的断言。 |
| 元数据(Metadata) | 一个 XML 文件,打包了实体 ID、端点和证书,可直接导入。 |
断言的有效期很短,并且会指明其受众(SP 的实体 ID)。SP 会拒绝任何已过期或面向其他应用的断言。
为什么 LMS 值得使用 SSO
- 无需额外密码。 人们使用日常账户,您的 MFA 和访问策略同样适用于培训。
- 新员工快速获得访问权限。 将 LMS 应用分配给一个群组,组内的新员工第一天就可以登录。
- 离职人员在源头失去访问权限。 在目录中停用某人后,他们就无法开始新的 LMS 会话。SAML 控制的是登录,而不是账户,因此请在离职流程中同时归档其 LMS 账户。
即时创建账户(JIT)
通过即时(JIT)创建账户,LMS 会在用户首次登录时根据断言的属性创建账户,因此无需导入用户列表。请为其设置防护措施:
- 将其限制在您自己的邮箱域名内,这样配置错误的应用或访客账户就不会产生多余的用户。
- 给新账户最低的角色,并有意识地授予管理员权限。
- 如果您的 IdP 可以发送稳定的标识符,就以此匹配用户,因为电子邮件地址会变。
SP 发起与 IdP 发起的登录
- SP 发起:用户打开 LMS,LMS 向 IdP 发送身份验证请求,IdP 将其响应发送(POST)到 ACS URL。它适用于书签和邮件链接,并且通常被认为是更安全的流程,因为响应对应的是 LMS 发出的请求。
- IdP 发起:用户在 Microsoft My Apps、Okta 控制面板或 Google 应用菜单中点击该应用的图标,IdP 便向 ACS URL 发送一个未经请求的响应。
您可以两者都提供;请分别测试。
分步设置 SAML SSO
各家的流程大同小异:
- 规划范围:谁使用 SSO、哪些群组获得该应用、允许哪些邮箱域名,以及用哪个属性识别每个人。
- 在 LMS 中创建连接,并记下其实体 ID 和 ACS URL。
- 在您的 IdP 中创建 SAML 应用,填入这些值,选择 NameID 格式,并添加电子邮件、名和姓属性。
- 分配用户或群组;未被分配的人通常会被拒绝。
- 向 LMS 提供 IdP 的信息:元数据 URL、元数据文件,或 IdP 的实体 ID、登录 URL 和签名证书。
- 映射属性,使其与您的 IdP 实际发送的名称一致。
- 测试,然后启用,并告知用户将发生的变化。
各提供商说明
您的提供商文档中有确切的界面。值得了解的是:
- Microsoft Entra ID:使用非库(non-gallery)企业应用程序,而不是应用注册,后者不提供 SAML。声明名称是很长的 URI,请原样复制。对象 ID 是很好的稳定标识符。对于没有邮箱的用户,电子邮件声明可能为空;若用户主体名称是真实地址,可用它代替。
- Okta:创建 SAML 2.0 应用集成。属性语句需要您自己命名,因此必须与 LMS 的映射完全一致,包括大小写。其内部用户 ID 是稳定的标识符。
- Google Workspace:添加自定义 SAML 应用并下载其元数据文件。该应用默认处于关闭状态,请为正确的组织单位或群组开启。典型的设置以主邮箱地址识别用户,因此请考虑地址被重命名和重复使用的情况。
测试清单
上线前,请在无痕浏览器窗口中检查以下各项:
- 现有用户从 LMS 开始登录,以及再从应用图标登录。
- 您域名下的新用户获得具有正确角色的账户。
- 未被分配到该应用的人被拒绝。
- 不在您允许域名内的人被拒绝。
- 电子邮件、名和姓正确送达。
- 管理员仍能通过恢复途径进入。
常见陷阱
时钟偏差
如果 IdP 与 LMS 的时钟相差超过 LMS 的容忍范围,有效的断言会被拒绝,提示尚未生效或已过期。这主要影响自托管的身份服务器,因此请保持它们的时钟同步。
证书轮换
IdP 签名证书会过期,如果 LMS 不信任新证书,所有登录会同时失败。请把到期日期记入日程。如果您的 LMS 可以同时信任两个证书,请先在 LMS 中添加新证书,再在 IdP 中启用;否则,请在业务清闲时同时切换两端。切换后立即测试。
属性映射
属性名称通常要求完全匹配:期望 email 的 LMS 不会接受 Email。还要检查标识符。临时(transient)NameID 每次会话都会变化,电子邮件地址也可能变化;持久(persistent)NameID 或不可变的 ID 属性则是稳定的。如果按电子邮件匹配用户,请在离职者的地址被重新分配之前先归档其账户。
邮箱域名不匹配
目录中往往包含登录名不是其电子邮件地址的人、使用其他域名的承包商,以及仍使用旧域名的被收购企业员工。如果 LMS 将账户限制在特定域名,他们就会被拒绝。请在上线前列出所有域名。
Acadenix 如何实现
SAML SSO 属于 Gold 套餐,并提供 Entra ID、Okta 和 Google Workspace 的分步指南。
- 先测试,再激活。 您先将 IdP 的信息保存为草稿,通过在提供商处登录来运行 Test configuration(测试配置),然后才激活。如果缺少电子邮件声明,系统会连同您的提供商实际发送的声明名称一并报告。
- 分阶段变更。 新证书或新租户会作为配置更新录入,在您激活之前,当前配置继续有效。
- 域名范围内的 JIT。 没有账户的用户首次登录时会获得学员账户,前提是其邮箱属于您组织的注册域名,并且您可以将其关闭。已有 Acadenix 账户的用户首次通过您的 IdP 登录时,Acadenix 会向其发送一次性验证码以确认关联。每人仅此一次。
- 两种入口。 用户可以从您的登录页面开始(登录页可直接跳转到您的 IdP,也可显示一个按钮),也可以从 My Apps、Okta 或 Google 中的图标开始。
- 一个连接,一个组织。 SAML 连接不会向其所属组织下级的组织传递,这对拥有多个站点的集团很重要。
- 恢复途径。 如果您的 IdP 宕机,管理员仍可使用邮件发送的一次性验证码登录,且该途径无法关闭。
除 SAML 外,用户还可以使用邮件验证码或 Google、Microsoft 或 LinkedIn 账户登录。更多内容见我们的安全页面。
要点回顾
- 交换实体 ID、ACS URL 和元数据,然后映射稳定的标识符和已验证的电子邮件。
- 将 JIT 账户限制在您自己的域名内,并赋予最低角色。
- 上线前测试两种登录流程、拒绝情形和恢复途径。
- 把证书到期日记入日程,并归档离职人员的 LMS 账户。


