SAML协议— 理解SAML2 协议和联合身份验证流程

news2025/4/4 19:50:48

1、SAML协议概念

安全断言标记语言,简称SAML,是一个基于 XML 的开源标准数据格式,它在当事方之间交换身份验证和授权数据,尤其是在身份提供者和服务提供者之间交换。SAML解决的最主要的需求是基于Web的单点登录(SSO),SAML2.0 可以实现基于网络跨域的单点登录(SSO), 以便于减少向一个用户分发多个身份验证令牌的管理开销。

2、SAML 主体构成

在 SAML 协议中定义了三种角色:

  • User Agent:用户代理,一般指自然人用户通过浏览器进行服务访问或者向其他服务提供者请求资源的的系统主体;

  • IDP(Identity Provider):一种服务提供者,它创建、维护和管理主体的身份信息,并向联邦内的其他服务提供者提供主体身份验证;简称 IdP,身份提供方能够向 SP 发送身份断言,所谓身份断言就是由 SP签发的,可以标识某个人身份的 Token,只不过,在 SAML 协议中,这个 Token 的格式是 XML 形式的。还有一些其他的身份提供方,例如 Okta、SSOCircle、Auth0,他们都可以向 SP 返回身份断言。

  • SP(Service Provider):一种服务提供者,通过解析IDP发出的身份认证断言,验证主体身份认证信息后,给主体或联邦内其他系统提供服务。简称 SP。什么是服务提供方?例如:阿里云控制台、腾讯云控制台、AWS 控制台这些都是服务提供方。

两个主体通过用户的浏览器进行信息交换。方式上,SP 可以返回带参数的重定向 HTTP 响应,让用户立刻通过参数将信息发给 IdP。而 IdP 会返回一个表单,同时还有一段立即提交表单的 JS 代码,从而让用户立刻将信息发给 SP。

总结一下,SP 提供服务,需要知道用户的身份,就需要向 IdP 询问。IdP 知道用户的身份,当用户在 IdP 登录成功,IdP 就将用户的身份以 SAML 断言的形式发给 SP。SP 信任 IdP 发来的身份断言,从而赋予该用户在 SP 的相关权限。

3、理解 SAML 流程

3.1 发起 SAML 登录到登录成功的整个过程:

在这里插入图片描述

  1. 用户试图登录 SP 提供的应用。
  2. SP 生成 SAML Request,通过浏览器重定向,向 IdP 发送 SAML Request。
  3. IdP 解析 SAML Request 并将用户重定向到认证页面。
  4. 用户在认证页面完成登录。
  5. IdP 生成 SAML Response,通过对浏览器重定向,向 SP 的 ACS 地址返回 SAML Response,其中包含 SAML Assertion 用于确定用户身份。
  6. SP 对 SAML Response 的内容进行检验。
  7. 用户成功登录到 SP 提供的应用。

3.2 SP 与 IdP 之间通信方式

SP 与 IdP 之间的通信方式分为 HTTP Redirect Binding、HTTP POST Binding、HTTP Artifact Binding。每种方式在不同的阶段会用不同类型的 HTTP 与对方通信。

HTTP Redirect Binding
SP 通过重定向 GET 请求把 SAML Request 发送到 IdP,IdP 通过立即提交的 Form 表单以 POST 请求的方式将 SAML Response 发到 SP。
在这里插入图片描述

HTTP POST Binding
SP 通过立即提交的 Form 表单以 POST 请求的方式将 SAML Request 发到 IdP。IdP 通过立即提交的 Form 表单以 POST 请求的方式将 SAML Response 发到 SP。

在这里插入图片描述

HTTP Artifact Binding
SP、IdP 双方只通过浏览器交换 SAML Request、SAML Response 的索引编号,收到编号后,在后端请求对方的 Artifact Resolution Service 接口来获取真正的请求实体内容。从而避免 SAML Request、SAML Response 暴露在前端。

在这里插入图片描述
不同的Binding方式使用不同的通信方式和消息体,使用最多的是HTTP Redirect Binding和HTTP POST Binding方式,其次是HTTP Artifact Binding。常用方式是SP使用HTTP Redirect Binding通过浏览器将SAMLRequest转发到IDP的SSO地址,IDP使用HTTP POST Binding方式将用SAMLResponse返回到SP的ACS地址。

参考资料:
https://docs.microsoft.com/zh-cn/azure/active-directory/saas-apps/saml-toolkit-tutorial
​https://help.aliyun.com/document_detail/160431.html?scm=20140722.184.2.173#h2-78q-k9u-yay

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/540886.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

100 个 Go 错误以及如何避免:1~4

协议:CC BY-NC-SA 4.0 译者:飞龙 本文来自【OpenDocCN 饱和式翻译计划】,采用译后编辑(MTPE)流程来尽可能提升效率。 真相一旦入眼,你就再也无法视而不见。——《黑客帝国》 一、GO:学起来简单&…

再次比较以1为参照的6-3分布

( A, B )---1*30*2---( 1, 0 )( 0, 1 ) 让网络的输入只有1个节点,AB各由9张二值化的图片组成,让A中有3个0,6个1.B中全是1,排列组合A的所有可能,统计迭代次数的顺序。 得到数据 迭代次数平均值 A-B 迭代次数 F 9 …

5年经验还只会点点点,别等了,跳槽吧.....

随着工作年限的不断增长,感觉自己的技术水平与自己的工作年限严重不符。想跳槽出去换个新环境吧,又感觉自己的能力达不到心仪公司的标准,即使投了简历自己也没什么面试通知。就这样在原来的公司一天天的混日子,时间久了&#xff0…

「免费版Axure」原型设计工具!

Axure 是一款经典的原型设计工具,但需要下载电脑端软件使用,对新手要求较高,且在线协作效率低,使用成本较高。即时设计是一款免费在线原型设计工具,支持导入 Axure 文件进行二次布局、评审、演示和分享,让用…

GitLAB CI-CD入门

GitLab CI-CD入门 目录 1、GitLabCI/CD简介 GitLabCI/CD简介 GitLabCI/CD是GitLab内置的持续集成与持续部署系统 开源: CI/CD是开源GitLab社区版和专有GitLab企业版的一部分。(极狐)易于学习: 官方具有详细的学习操作文档。无缝集成: CI/CD…

操作系统原理大题

一、地址变换和求FAT表大小 某一页表内容自0~7依次为03; 07; 0B;11;1A;1D;20;22. 请计算页面大小为1K和4K时的逻辑地址134D对应的物理地址。 首先,将134D转换为二进制数为 0001001101001101 1k为2的10次方 从后往前占十位为 000100|1101001101 竖线前面的二进制转…

Promise的用法原理手写实现

Promise的用法、原理、手写实现 1. promise 入门简介 Promise 是用来解决异步编程的问题。 1.1 JS 中分同步Api 和 异步Api。 同步API&#xff1a;只有当前API执行完成后&#xff0c;才能继续执行下一个API for (let i 0; i < 10000; i) {console.log(i); } console.l…

09-DockerFile

文章目录 1 Dockerfile2 构建过程3 Dockerfile保留字3.1 FROM3.2 MAINTAINER3.3 RUN3.4 EXPOSE3.5 WORKDIR3.6 USER3.7 ENV3.8 VOLUME3.9 ADD3.10 COPY3.11 CMD3.12 ENTRYPOINT 4 构建镜像4.1 案例14.2 案例2 5 虚悬镜像 1 Dockerfile Dockerfile 是用来构建 Docker 镜像的文本…

浅谈JVM基本结构

目录 1.JVM概念 2.JVM基本结构 3.JVM存储数据案例 1.JVM概念 JVM是Java Virtual Machine&#xff08;Java虚拟机&#xff09;的缩写&#xff0c;JVM是一种用于计算设备的规范&#xff0c;它是一个虚构出来的计算机&#xff0c;是通过在实际的计算机上仿真模拟各种计算机功能…

SpringBoot【开发实用篇】---- 整合第三方技术(任务、邮件)

SpringBoot【开发实用篇】---- 整合第三方技术&#xff08;任务、邮件&#xff09; 1. 任务QuartzTask 2. 邮件发送简单邮件发送多组件邮件&#xff08;附件、复杂正文&#xff09; 1. 任务 springboot整合第三方技术第二部分我们来说说任务系统&#xff0c;其实这里说的任务系…

mysql中的binlog

目录标题 前言binlog有两个常用的使用场景 常用的binlog日志操作命令查看所有binlog日志列表 【show master logs;】查看master状态&#xff0c;即最后&#xff08;最新&#xff09;一个binlog日志的编号名称&#xff0c;及其最后一个操作事件pos结束点(Position)值。【show ma…

Net跨平台UI框架Avalonia入门-安装和使用

Avalonia UI是是Net的跨平台UI框架&#xff0c;支持 Windows、Linux、iOS 和 Android&#xff0c;与Net其他UI框架相比&#xff0c;主要是支持Linux。在国产化的需求下&#xff0c;对于C#开发的程序员&#xff0c;Avalonia适合用来开发Linux的桌面客户端。 Avalonia 安装 安装…

SpringBoot——日志

简单介绍&#xff1a; 在我们的程序开发中&#xff0c;日志的存在是必不可少的&#xff0c;日志可以帮助我们观察程序的运行过程&#xff0c;报错信息&#xff0c;各种警告&#xff0c;在我们调试程序的时候起到了非常大的作用。那么在SpringBoot中&#xff0c;我们在每次启动…

6.4.1最小生成树(Prim和kruskal算法)

生成树的概念&#xff1a; 连通图的生成树是包含图中全部顶点的一个极小连通子图 &#xff08;边尽可能的少&#xff0c;但要保持连通&#xff09; 若图中顶点数为n&#xff0c;则它的生成树中含有n-1条边。对于生成树而言&#xff0c;若看去他的一条边&#xff0c;则会变成…

软件测试太卷了,三个练手的软件测试实战项目偷偷提升自己(附全套视频跟源码)

项目一&#xff1a;12306抢票项目 项目测试目的 学会Selenium定位web元素的方法 熟练浏览器调试工具使用 项目主体步骤 1&#xff09; 人工走一遍流程&#xff0c;对自动化的流程心中有数 2&#xff09; 按步骤拆分&#xff0c;然后对每一个小步骤编写自动化脚本 3&#xf…

1.8G专网5G工业路由器助力智能电网-电力物联网方案

随着智能电网的普及与使用&#xff0c;电力终端的数量也日益剧增&#xff0c;由于间距较远、位置偏僻的特性&#xff0c;造成监管难、效率低、成本高等管理维护难题。 5G的价值也体现了由实验室走向垂直行业应用&#xff0c;赋予各行各业高效组网、高速用网的应用体验。智联物联…

PowerBi连接MySQL提示需安装组件才能使用,本人删去已经下载好的组件,再做一份详细教程。

问题 当我们用PowerBi连接Mysql时候&#xff0c;他突然提示我们需要安装组件。 解决 检查自己的MySQL版本 打开cmd运行框,输入命令mysql -uroot -p,再输入数据库密码 输入select version(); 我这里是8.0.16版本&#xff0c;记住自己的版本号 下载 mysql connector https:/…

在 EKS 上部署 HummerRisk

HummerRisk 是开源的云原生安全平台&#xff0c;以非侵入的方式解决云原生环境的安全和治理问题。核心能力包括混合云的安全治理和容器云安全检测。本文讲介绍如何在 EKS 上部署 HummerRisk。 EKS 简介 Amazon Elastic Kubernetes Service&#xff08;Amazon EKS&#xff09;…

python创建用户界面之PyQt5的使用

首先我们winR输入cmd 有两种方法下载PyQt5 方法一&#xff1a; pip install PyQt5 pip install PyQt5-tools 方法二&#xff1a; pip install PyQt5 -i https://pypi.douban.com/simple pip install PyQt5-tools -i https://pypi.douban.com/simple 下载好了之后我们打开 Pych…

idea热部署插件JRebel激活(强烈推荐,试试就离不开了)

JRebel可以实现在idea中热部署项目&#xff0c;修改后不用重启项目&#xff0c;让开发更丝滑。 JRebel需要激活才可以正常使用。 一、快速使用 1、idea安装JRebel插件。 File>Settings>Plugins 搜索JRebel 2、激活 1&#xff09;填写激活信息 个人部署的注册服务器&…