17370845950

SAML断言的XML结构是什么 单点登录SSO
SAML断言是SAML 2.0中嵌套在响应内的XML结构,含Issuer、Subject、Conditions等必需元素,承载AuthenticationStatement和AttributeStatement两类核心声明,并通过ID、IssueInstant、NotOnOrAfter等属性保障安全与时效。

SAML断言(SAML Assertion)是SAML协议中承载用户身份和授权信息的核心XML片段,用于在身份提供者(IdP)和服务提供者(SP)之间安全传递认证与属性数据。它不是完整的消息(如SAML请求或响应),而是嵌套在中的关键内容块。

基本结构:三个必需的顶级元素

SAML断言是一个元素,必须包含以下三个子元素(按顺序):

  • Issuer:标识断言签发方(通常是IdP的实体ID),格式为https://idp.example.com
  • Signature(可选但强烈推荐):对断言整体进行XML签名,确保完整性与来源可信,位于内;
  • Subject:描述被认证的主体(即用户),含(如邮箱、临时ID)及可选的(说明如何验证该主体,例如通过Bearer方式回传给SP)。

核心声明类型:AuthenticationStatement、AttributeStatement、AuthorizationDecisionStatement

断言主体由一个或多个“声明(Statement)”组成,最常用的是前两种:

  • AuthenticationStatement:证明用户已通过某种方式完成认证。含AuthnInstant(认证时间)、SessionIndex(会话标识)、AuthnContext(认证强度,如密码、MFA);
  • AttributeStatement:携带用户属性,如emaildisplayNamegroups等。每个属性用包裹,值放在中,支持多值和命名空间;
  • AuthorizationDecisionStatement(较少使用):表达对某资源的访问决策(允许/拒绝),实际SSO中通常由SP自行鉴权,IdP一般不提供。

关键属性与约束

断言本身带有多项元数据属性,直接影响安全性与有效性:

  • Version="2.0":必须为2.0,SAML 1.x已淘汰;
  • ID:唯一标识符(以_开头的随机字符串),用于防重放;
  • IssueInstant:UTC时间戳,表示断言生成时刻;
  • Conditions:定义有效范围,含NotBeforeNotOnOrAfter(建议不超过5–10分钟)、AudienceRestriction(明确指定接收方SP的实体ID,防止断言被滥用于其他服务)。

典型简化示例(仅保留主干)

以下是一个精简但合法的SAML断言片段(省略签名和命名空间声明):

  ID="_abc123" IssueInstant="2025-05-20T08:30:00Z" Version="2.0">
  https://idp.example.com
  
    user@example.com
    
                                          Recipient="https://sp.example.com/sso/acs"/>
    

  

  
    
      https://sp.example.com
    
  

  
    
      urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport
    
  
  
    asic">
      user@example.com