SAML是一种基于XML的开放标准,用于在系统间安全交换身份认证和授权信息,实现单点登录(SSO);它通过IdP与SP协作,以数字签名断言替代重复登录,解决密码疲劳、权限集中管控与安全盲区问题。

SAML(Security Assertion Markup Language,安全断言标记语言)是一种基于 XML 的开放标准,用于在不同系统之间安全地交换用户身份认证和授权信息。它的核心作用是让一个系统(比如企业内部的身份平台)验证用户身份后,把这份“我确认这个人是谁、能访问什么”的可信声明,打包传递给另一个系统(比如云邮箱、协作工具),从而免去重复登录——这就是单点登录(SSO)的技术基础。
它解决什么实际问题
当员工要同时使用 OA、HR 系统、CRM 和 Slack 时,传统方式需要记 4 套账号密码,每次切换都要重新输。SAML 把身份验证集中到一个可信的源头(IdP,身份提供者),其他应用(SP,服务提供者)只负责接收并信任这个源头发来的断言,不再自己验人。
- 减少密码疲劳和弱密码风险
- 管理员可在 IdP 侧一键禁用离职员工对所有 SAML 应用的访问权限
- 避免各系统各自存储密码带来的安全盲区
SAML 的关键角色和流程
整个过程涉及两个主要角色:
- 身份提供者(IdP):如 Okta、Azure AD、Keycloak 或自建的统一身份平台,负责用户登录、多因素认证、权限判断
- 服务提供者(SP):如 Salesforce、Confluence、Zoom 等支持 SAML 的应用,不处理登录,只接收并解析 IdP 发来的加密断言
典型流程是:用户点击进 SP → SP 重定向到 IdP → 用户在 IdP 页面登录 → IdP 生成带数字签名的 SAML 响应(含用户名、邮箱、组成员等属性)→ 通过浏览器 POST 回传给 SP → SP 验证签名和有效期,完成登录。
本文档主要讲述的是Python开发网站指南;HTML是网络的通用语言,一种简单、通用的全置标记语言。它允许网页制作人建立文本与图片相结合的复杂页面,这些页面可以被网上任何其他人浏览到,无论使用的是什么类型的电脑或浏览器 Python和其他程序语言一样,有自身的一套流程控制语句,而且这些语句的语法和其它程序语言类似,都有for, if ,while 类的关键字来表达程序流程。希望本文档会给有需要的朋友带来帮助;感兴趣的朋友可以过来看看
SAML 的安全机制靠什么保障
它不是靠“传输保密”,而是靠“内容可信”:
- 所有断言都用 IdP 的私钥签名,SP 用对应公钥验证,防止篡改或伪造
- 支持绑定断言与特定 SP 实体 ID、限制有效时间(通常几分钟)、限定接收地址(AssertionConsumerServiceURL)
- 敏感字段(如用户唯一标识)可加密,进一步保护隐私
和 OAuth / OpenID Connect 有什么区别
SAML 更偏企业级、XML 风格、强调“断言”(assertion)——即一份已验证完毕的身份结论;而 OAuth 2.0 是授权框架,OpenID Connect 是构建在它之上的身份层,更轻量、JSON 格式、适合移动和 Web 前端场景。SAML 在传统企业 SSO 中仍占主流,尤其在需要强审计、复杂属性映射或与旧系统集成时优势明显。









