SAML断言的XML结构是什么 单点登录SSO

发布时间 - 2026-01-02 00:00:00    点击率:
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
    
  


# word  # session  # ai  # 邮箱  # asic  # String  # 命名空间  # format  # xml  # 标识符  # 字符串  # Attribute  # http  # https  # 是一个  # 可选  # 的是  # 放在  # 多个  # 两种  # 不超过  # 多项  # 较少  # 强烈推荐 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 微信小程序 scroll-view组件实现列表页实例代码  打造顶配客厅影院,这份100寸电视推荐名单请查收  Laravel中DTO是什么概念_在Laravel项目中使用数据传输对象(DTO)  Laravel如何实现数据导出到PDF_Laravel使用snappy生成网页快照PDF【方案】  Laravel如何使用集合(Collections)进行数据处理_Laravel Collection常用方法与技巧  JavaScript如何实现类型判断_typeof和instanceof有什么区别  浅谈Javascript中的Label语句  如何用JavaScript实现文本编辑器_光标和选区怎么处理  如何用IIS7快速搭建并优化网站站点?  Win11怎么设置虚拟桌面 Win11新建多桌面切换操作【技巧】  车管所网站制作流程,交警当场开简易程序处罚决定书,在交警网站查询不到怎么办?  Laravel storage目录权限问题_Laravel文件写入权限设置  Laravel如何实现用户角色和权限系统_Laravel角色权限管理机制  如何基于云服务器快速搭建网站及云盘系统?  Laravel怎么配置自定义表前缀_Laravel数据库迁移与Eloquent表名映射【步骤】  Laravel怎么做数据加密_Laravel内置Crypt门面的加密与解密功能  东莞市网站制作公司有哪些,东莞找工作用什么网站好?  java ZXing生成二维码及条码实例分享  Laravel如何实现模型的全局作用域?(Global Scope示例)  Laravel与Inertia.js怎么结合_使用Laravel和Inertia构建现代单页应用  EditPlus中的正则表达式 实战(4)  Laravel Artisan命令怎么自定义_创建自己的Laravel命令行工具完全指南  Linux后台任务运行方法_nohup与&使用技巧【技巧】  家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?  EditPlus中的正则表达式 实战(1)  中山网站制作网页,中山新生登记系统登记流程?  Laravel项目结构怎么组织_大型Laravel应用的最佳目录结构实践  Laravel如何实现多表关联模型定义_Laravel多对多关系及中间表数据存取【方法】  php静态变量怎么调试_php静态变量作用域调试技巧【解答】  Laravel如何生成PDF或Excel文件_Laravel文档导出工具与使用教程  Python函数文档自动校验_规范解析【教程】  Laravel如何使用Gate和Policy进行权限控制_Laravel权限判定与策略规则配置  免费网站制作appp,免费制作app哪个平台好?  魔毅自助建站系统:模板定制与SEO优化一键生成指南  Laravel表单请求验证类怎么用_Laravel Form Request分离验证逻辑教程  网站广告牌制作方法,街上的广告牌,横幅,用PS还是其他软件做的?  详解Huffman编码算法之Java实现  猪八戒网站制作视频,开发一个猪八戒网站,大约需要多少?或者自己请程序员,需要什么程序员,多少程序员能完成?  laravel怎么实现图片的压缩和裁剪_laravel图片压缩与裁剪方法  laravel怎么使用数据库工厂(Factory)生成带有关联模型的数据_laravel Factory生成关联数据方法  CSS3怎么给轮播图加过渡动画_transition加transform实现【技巧】  Laravel如何创建和注册中间件_Laravel中间件编写与应用流程  如何在企业微信快速生成手机电脑官网?  如何在建站主机中优化服务器配置?  javascript中数组(Array)对象和字符串(String)对象的常用方法总结  电商网站制作价格怎么算,网上拍卖流程以及规则?  Laravel Asset编译怎么配置_Laravel Vite前端构建工具使用  iOS中将个别页面强制横屏其他页面竖屏  胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?  大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊?