无需登录 数据私有 本地保存

SAML 断言可视化工具 - 解码并查看身份声明

15
0
0
0

SAML 断言可视化工具

解码 Base64 编码的 SAML 断言,提取并可视化身份声明信息

就绪
0 字符

等待 SAML 数据输入

在左侧粘贴 Base64 或 XML,点击"解析断言"查看身份声明

常见问题与知识点

SAML(Security Assertion Markup Language)断言是身份提供者(IdP)生成的一份 XML 格式的安全声明,用于向服务提供者(SP)传递用户的身份验证和授权信息。它包含用户是谁(Subject)、如何认证的(AuthnStatement)、以及用户属性(AttributeStatement)等关键信息。SAML 2.0 是目前企业 SSO 单点登录最广泛使用的标准之一。

SAML Response<samlp:Response>)是外层信封,包含一个或多个 SAML Assertion<saml:Assertion>)。Response 包含目标地址、请求ID等协议级信息;Assertion 则是核心的身份声明,包含 Issuer、Subject、Conditions、AuthnStatement 和 AttributeStatement。一个 Response 可以包含多个 Assertion,但最常见的是包含一个。

SAML 断言在传输过程中(特别是 HTTP POST 绑定)会被 Base64 编码,主要原因包括:
① 确保 XML 内容在 HTTP 表单传输中不被破坏(避免特殊字符转义问题);
② 保持数据完整性,防止中间代理对 XML 内容的意外修改;
③ 在某些绑定(如 HTTP Redirect)中,还会结合 Deflate 压缩来减少 URL 长度。解码时直接使用 Base64 解码即可还原原始 XML。

NameID 是 SAML Subject 中用于标识用户的唯一标识符。常见格式包括:
emailAddress — 电子邮件地址
persistent — 匿名持久化标识符(同一用户在不同 SP 间使用不同的假名)
transient — 临时一次性标识符
unspecified — 未指定格式
X509SubjectName — X.509 证书主题名
正确解析 NameID 是 SSO 集成的关键步骤。

验证 SAML 断言需要检查多个方面:
① 时效性:检查 Conditions 中的 NotBefore 和 NotOnOrAfter,确保当前时间在有效窗口内;
② 签名验证:使用 IdP 的公钥验证 <ds:Signature> 数字签名;
③ 受众验证:确认 Audience 匹配你的 SP 实体 ID;
④ Recipient 验证:确认 SubjectConfirmationData 中的 Recipient 地址正确;
⑤ 重放攻击防护:检查 Assertion ID 是否已被使用过。

当 SAML Response 中包含 <EncryptedAssertion> 元素时,表示断言内容已被加密。这是为了在传输过程中保护敏感的身份信息。解密需要使用服务提供者(SP)的私钥,通常通过 XML Encryption 标准(http://www.w3.org/2001/04/xmlenc#)进行。本工具可以检测加密断言并提示用户,但解密需要相应的私钥材料。在企业 SSO 配置中,建议在非生产环境调试时暂时关闭加密以便于排查问题。

SAML AttributeStatement 中常见的用户属性包括:
email / mail — 电子邮箱
givenName / firstName — 名
sn / lastName / surname — 姓
displayName — 显示名称
uid / userPrincipalName — 用户主体名称
groups / memberOf — 用户组/角色
department — 部门
具体属性取决于 IdP 的配置和目录服务(如 Active Directory、LDAP)中的字段映射。

在 SAML HTTP Redirect 绑定中,SAMLRequest/SAMLResponse 参数会先经过 Deflate 压缩,再 Base64 编码,最后 URL 编码。与 POST 绑定不同,Redirect 绑定的数据需要先 Base64 解码,再进行 Inflate 解压缩才能得到原始 XML。本工具主要处理 POST 绑定的 Base64 编码数据;如果输入数据在 Base64 解码后显示为乱码,可能需要进行 Deflate 解压缩。现代浏览器支持 DecompressionStream API 来处理此类数据。