17370845950

SAML断言XML的结构是什么样的 单点登录原理
SAML断言是SAML协议中承载用户身份与授权信息的核心XML片段,嵌入于Response等协议消息中,包含AuthnStatement、AttributeStatement等声明,并通过签名、Conditions、SubjectConfirmation等机制保障安全。

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

SAML断言的典型XML结构

一个基础的SAML 2.0 元素包含三个可选但常见的核心声明(Statement):认证声明(AuthnStatement)、属性声明(AttributeStatement)和授权决策声明(AuthorizationDecisionStatement)。最常见的是前两者。

简化示例(去除了签名、命名空间缩写等细节,便于理解逻辑):

  xmlns="urn:oasis:names:tc:SAML:2.0:assertion">
  https://idp.example.com
  
    user@example.com
    
                                 Recipient="https://sp.example.com/sso/acs"
                    NotOnOrAfter="2025-05-20T10:35:45Z"/>
    

  

  
    
      https://sp.example.com
    
  

  
    
      
        urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport
      
    
  
  
    asic">
                             xs:type="xs:string">user@example.com
    
    
      employee
    
  

关键组成部分说明:

  • ID 和 IssueInstant:全局唯一标识符和签发时间,用于防重放
  • Issuer:断言签发方(IdP)的实体ID,必须与SP配置的IdP地址匹配
  • Subject + NameID:标识用户身份,NameID 是SP用来识别该用户的主键(如邮箱、ID字符串)
  • SubjectConfirmation:声明“此断言仅对指定接收方(SP的ACS URL)且在指定时间内有效”,含InResponseTo防篡改
  • Conditions:定义断言生效的时间窗(NotBefore/NotOnOrAfter)和作用域(Audience限制只能给哪个SP用)
  • AuthnStatement:证明用户已在某时刻以某种方式完成认证(如密码登录),含认证上下文
  • AttributeStatement:携带用户属性(邮箱、部门、角色等),供SP做授权或个性化使用

单点登录(SSO)原理(基于SAML)

SAML SSO本质是“一次认证,多处访问”:用户只需向IdP登录一次,后续访问已信任的SP时无需重复输入账号密码。整个流程由三方协作完成——浏览器(User Agent)、服务提供者(SP)、身份提供者(IdP)。

典型Web SSO流程(SP重定向绑定):

  • 用户访问SP(如 https://app.example.com),SP检测到未登录,生成SAML AuthnRequest 并重定向浏览器到IdP的SSO端点
  • 浏览器带着AuthnRequest(通常Base64编码+URL参数)到达IdP;IdP验证请求合法性(签名、目标SP是否受信)
  • IdP检查用户是否已登录:若否,呈现登录页;若是,跳过登录直接进入下一步
  • IdP构造包含用户断言的Response(含签名),通过浏览器自动提交HTML表单(POST)回SP的断言消费端点(ACS URL)
  • SP收到Response后:校验签名、验证Issuer/Audience/Conditions、解析Assertion中的NameIDAttribute,建立本地会话
  • 用户成功登录SP应用,后续请求由SP本地会话管理,不再触达IdP

安全关键点:

  • 所有SAML消息(尤其是ResponseAssertion)必须由IdP签名,SP必须用IdP公钥验证,防止伪造
  • SubjectConfirmationConditions 防止断言被截获重放或跨SP滥用
  • SP必须严格校验Audience值是否等于自身实体ID,避免“断言劫持”
  • IdP应确保NameID在SP上下文中具有唯一性和稳定性(如使用持久ID而非邮箱,避免邮箱变更导致会话中断)

基本上就这些。SAML断言不是黑盒,而是一份有明确语义、带多重保护机制的结构化凭证;SSO也不是魔法,是靠严谨的协议步骤、加密签名和策略校验协同实现的信任传递。