什么是SAML?
安全断言标记语言 (Security Assertion Markup Language, SAML) 是一种开放联合标准,允许身份提供商 (IdP) 对用户进行身份验证并将身份验证令牌传递给其他服务提供商 (SP)。SAML 让 SP 无需自行执行身份验证即可运行,并通过传递身份来整合内部和外部用户。它允许通过网络(通常是应用或服务)与 SP 共享安全凭证。SAML 能够在公有云环境、其他支持 SAML 的系统以及选定数量的位于本地或不同云中的其他身份管理系统之间实现安全的跨域通信。借助 SAML,您可以针对支持 SAML 协议和服务的任意两个应用启用单点登录 (SSO),从而允许 SSO 代表一个或多个应用执行多项安全功能。
SAML 的两个主要安全功能
- 身份验证:判断用户是否与其所述身份相符
- 授权:将用户授权传递给应用,以访问特定系统或内容
SAML 有何用途?
SAML 有助于增强企业的安全性,并简化员工、合作伙伴和客户的登录过程。组织用它来实现 单点登录, 这使用户能够使用一个用户名加密码访问多个站点、服务和应用。减少用户必须记住的密码数量不仅对用户来说更容易操作,而且还能降低其中一个密码被盗的风险。组织也可在其已启用 SAML 的应用中设置 身份验证 的安全标准。例如,他们可要求用户先进行 多重身份验证 才能访问本地网络和应用(例如 Salesforce、Concur 和 Adobe)。
SAML 可帮助组织处理以下用 例:
统一标识和访问管理:通过在一个系统中管理身份验证和授权,IT 团队可大大缩短他们在用户预配和标识权利方面耗费的时间。
启用零信任: 零信任安全策略要求组织验证每个访问请求,并仅限需要敏感信息的用户访问这些信息。技术团队可使用 SAML 为其所有应用设置策略,例如多重身份验证和条件访问。当用户的行为、设备或位置导致用户风险增大时,他们还可实施更严格的安全措施,例如强制要求密码重置。
丰富员工体验:除了简化员工访问,IT 团队还可在登录页面上标注品牌,跨应用创建一致的体验。员工也可通过自助服务体验轻松重置密码,从而节省时间。
SAML 的工作原理
SAML 在身份提供方与 SP 之间传递用户、登录名和属性的相关信息。每一个用户对 IdP 进行一次身份验证后,便可将其身份验证会话无缝扩展至潜在的众多应用。当用户尝试访问这些服务时,IdP 会将所谓的 SAML 断言传递给 SP。SP 会根据身份来请求授权和身份验证。
SAML 示例:
- 登录并访问 SSO 身份验证。
- 从身份提供方导出元数据并导入。
- 身份系统将了解有关 SSO 身份提供方的更多信息,以便于从身份系统导出元数据。
- 将元数据提供给您的 SSO 身份提供方团队。
- 测试并启用 SSO。
- 建议用户仅使用自己的 SSO 凭证进行登录。
什么是 SAML 断言?
SAML 断言是身份提供方发送给 SP 的 XML 文档,内含用户授权状态。SAML 断言有三种类型,即身份验证、属性和授权决策。
- 身份验证断言有助于验证用户的身份,并提供用户登录的时间以及所使用的身份验证方法(例如密码、MFA、Kerbeos 等)
- 所分配的断言会将 SAML 令牌传递给 SP。假定 SAML 用于标识用户的属性在 IdP 和 SP 目录中是相同的。SAML 属性是提供用户相关信息的特定数据片段
- 授权决策断言可说明用户是否获得使用服务的授权,或者身份提供方是否因密码失败或缺乏服务权限而拒绝了请求
SAML 与OAuth
用户使用 SAML 和 OAuth 可更轻松地访问多个服务,无需单独登录每个服务,实现单点登录体验,但是这两个协议使用不同的技术和过程。SAML 使用 XML 来让用户使用相同的凭据访问多个服务,而 OAuth 使用 JWT 或 JavaScript 对象表示法来传递授权数据。
参考资料
Spring SAML
什么是SAML(微软)?
什么是SAML(Oracle)?
SAML和OAuth2这两种SSO协议的区别
OpenSAML 使用引导,可参考下面的系列文章: