基于OIDC的SSO单点登录

news2024/11/25 10:30:02

文章目录

  • 什么是SSO(Single Sign On)单点登录
  • OIDC(Open ID Connect)
  • SSO服务授权流程(OIDC)
    • 授权模式
      • 授权码模式
        • 授权码模式授权流程
        • 请求授权码过程
    • 授权模式对比总结

什么是SSO(Single Sign On)单点登录

SSO单点登录:是指用户的一次性鉴权登录。即用户在身份验证服务器服务器登录一次后,在身份验证服务器的注册服务中即可自动完成登录验证的功能。简单来说,就是在有多个系统时,只需要登录一次,其他服务即可自动感知获取到用户的登录状态。
单点登录的主要核心是身份验证服务器。在身份验证服务器中注册了用户的具体信息和可信应用。在其他服务获取登录状态时,是通过相关协议直接访问身份验证服务器获取用户的登录状态和身份完成登录的授权操作的。

OIDC(Open ID Connect)

OIDC = (Identity, Authentication) + OAuth2.0
OIDC是一个基于OAuth2.0协议的身份认证标准协议。OIDC使用OAuth2的授权服务器来为可信任客户端提供用户的身份认证,并把对应的身份认证信息传递给客户端,且可以适用于各种类型的客户端,且完全兼容OAuth2。
OIDC基于OAuth2.0,使用access token来授权可信任应用访问保护信息。同时,OIDC提供id token来解决OAuth2无法进行用户身份认证的问题。OIDC将用户身份认证信息以id token的形式传递给可信任应用。可信任应用在验证id token后进一步通过OAtuh2获取access token读取更多信息。

SSO服务授权流程(OIDC)

应用系统注册:应用在身份验证服务器中进行注册登记。设置应用的回调函数,生成应用ID、secret等信息。

授权模式

OIDC根据用户的身份类型和设置的授权模式方法的不同,具有不同的授权流程。根据自己的授权模式执行具体的流程。

授权码模式

授权码模式构建构建能够安全存储机密的服务器端(或 Web)应用程序,如带后端的相关程序。
授权码模式

授权码模式授权流程

  • 携带有应用服务器生成的state(防止CSRF跨域攻击)和在认证服务器注册的信息重定向到认证服务器的/authorize授权接口
  • 认证服务器重定向登录界面给用户(若用户已登录,则处理器会在短时间内完成重定向和认证服务,前端登录界面未加载显示前已完成相关步骤)
  • 用户进行身份认证
  • 完成认证后,认证服务器返回一个可过时的授权码code到应用程序(code数据用来向认证服务器交换token信息,code数据具有时效性,所以请在其失效之前及时获取具体的token信息)
  • 应用服务器携带认证的code信息和应用信息请求认证服务器的/token接口获取用户的access_token信息
  • 认证服务器将access_token返回给应用服务器
  • 用户根据access_token获取需要认证的相关用户身份信息

请求授权码过程

https://${AuthorizeUri}?client_id=${ClientId}&response_type=code&scope=openid&redirect_uri=${RedirectUri}&state=${State}
  • 请求授权码:
    • AuthorizeUri: 认证服务器的授权接口地址
    • ClientId: 应用服务器在认证服务器中注册的客户端ID
    • RedirectUri: 应用服务器在认证服务器中注册的应用服务器回调地址
    • State: 应用服务器生成state用来防止CSRF跨域攻击
curl -v -X POST \
	-H "Content-type:application/x-www-form-urlencoded" \
	"https://${TokenUri}" \
	-d "client_id=${ClientId}&client_secret=${ClientSecret}&grant_type=authorization_code&redirect_uri=${RedirectUri}&code=${Code}"
  • 通过code获取access_token信息:
    • application/x-www-form-urlencoded: 在调用接口获取access_token时,其Content-type应设置为application/x-www-form-urlencoded类型
    • TokenUri: 认证服务器的获取令牌token接口地址
    • ClientSecret: 应用服务器在认证服务器中注册的应用服务器Secret信息
    • Code: 上一步获取到的授权码Code信息,或调用失败,可检测授权码是否过期

授权模式对比总结

本文只对前后端授权常见的授权码模式做详细介绍,其他授权模式可自行了解,这里只做简单介绍。

授权模式适用情况说明
授权码模式(Authorization Code)能够安全存储机密的服务器端(或 Web)应用程序通过授权服务获取授权码code,通过code换取可用的access_token完成授权
带有PKCE的授权码模式(Authorization Code with PKCE适用于构建原生应用程序,如前端SPA服务,桌面、移动端程序等带PKCE的授权码模式授权流程与授权码模式类似,只是在开始和结束时有一个额外的PKCE验证的过程
客户凭证模式(Client Credentials)客户凭证模式适用于没有最终用户的服务器端(“机密”)客户端应用程序,通常是机器对机器通信。如微服务调用等场景。应用程序根据ClientId和ClientSecret获取access_token完成授权
隐含模式(Implicit)不推荐使用不安全,隐含模式等token信息在url在携带,容易被窃取或篡改,推荐改为带有PKCE的授权码模式完成授权
交互代码(Interaction Code)交互代码授权通常由本机、前端SPA和Web客户端应用程序使用,这些应用程序希望直接与用户交互并在用户和授权服务器之间进行调解,而不是使用基于浏览器的重定向来传递身份验证。交互代码流程类似于带PKCE的授权码授权流程。所有客户端都需要传递ClientId以及Code交换证明密钥(PKCE)以确保流程安全。Web应用程序等机密客户端还必须在其授权请求中传递客户端密钥。
直接身份验证-单因素带外数据(out-of-band,OOB)验证当希望应用程序直接对用户进行身份验证时,可以使用直接身份验证。带外因素是一种需要通过单独的通信通道以及初始用户凭据进行二次验证方法的因素。传输层协议使用带外数据来发送一些重要的数据,如果通信一方有重要的数据需要通知对方时,协议能够将这些数据快速地发送到对方
直接身份验证-单因素动态密码 (one-time passcode,OTP)验证当希望应用程序直接对用户进行身份验证时,可以使用直接身份验证。动态口令也称一次性密码,是指用户的密码按照时间或使用次数不断动态变化,每个密码只使用一次
直接身份验证-多因素带外数据(multifactor out-of-band,MFA OOB)验证当希望应用程序直接对用户进行身份验证时,可以使用直接身份验证。采用OOB作为次要验证因素进行授权认证
直接身份验证-多因素动态密码 (one-time passcode,OTP)验证当希望应用程序直接对用户进行身份验证时,可以使用直接身份验证。采用OTP作为次要验证因素进行授权认证
资源所有者密码(Resource Owner Password)不推荐使用适用于没有其他流程的应用程序,因为它要求应用程序代码完全受信任并免受凭据窃取攻击。主要用途是为遗留应用程序提供一致且可预测的集成模式,否则这些应用程序无法更新为更安全的流程。
SAML2.0断言(SAML 2.0 Assertion)适用于能够从SMAL认证提供商获取有效、签名的SMAL授权,希望使用现有信任关系而无需在授权服务器上进行直接用户批准步骤的客户端应用程序。SMAL2.0断言从SMAL身份提供商获取有效、签名的SMAL授权,然后将其交换为来自OAuth授权服务器的OAuth访问令牌

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

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

相关文章

Navicat 备份和恢复MongoDB库的数据

1、前期准备 (1) 有数据的MongoDB数据库old_db、空数据库new_db (2) 准备好MongoDB Tools 前往页面:https://www.mongodb.com/try/download/database-tools 选择所需版本下载并解压到自己想要的目录中: 2、将数据库old_db中的数据备份导出 (1) 对old_db…

多国卫星遥感领域工作人员和专家莅临大势智慧考察交流

7月4日下午,商务部卫星主题研修班(后简称“卫星研修班”)20余名来自多个国家的卫星遥感相关领域的工作人员和专家莅临武汉大势智慧有限公司(后简称“大势智慧”)参观考察、交流学习。大势智慧黄先锋博士陪同考察并作交…

学生用的台灯有什么讲究吗?盘点暑假适合写作业的台灯

如今青少年近视的比例越来越大,而且年龄越来越提前了,前不久经过一个小学看到二三年级就已经有孩子开始近视佩戴眼镜。其实造成近视的原因不全是读写作业时的坐姿不标准、学习时间过长、缺少户外的运动等,也包括可能灯光光源的问题造成对于视…

使用QTreeView显示指定目录中的文件,并自定义Header

这次研究了QTreeView的用法,于是想使用QTreeView显示制定目录下的所有子目录和文件。过程中,遇到了几个问题,在此记录一下同时分享给大家,如有不妥之处,还请批评指正: 设置根目录后,仍然会展示…

thinkphp系列vulhub所有漏洞复现ThinkPHP 2.x 任意代码执行漏洞,ThinkPHP5 5.0.22/5.1.29 远程代码执行漏洞

ThinkPHP 2.x 任意代码执行漏洞 漏洞详情: hinkPHP 2.x版本中,使用preg_replace的/e模式匹配路由: $res preg_replace((\w).$depr.([^.$depr.\/])e, $var[\\\1\]"\\2";, implode($depr,$paths));导致用户的输入参数被插入双引号…

力扣 90. 子集 II

题目来源:https://leetcode.cn/problems/subsets-ii/description/ C题解1:由于解集不能包含重复的子集,所以我们先对nums进行排序, 以便后续去重。 采用递归回溯法,对每个子集都即使保存,在完成第一次子集…

一文晓得SaaS、IaaS和 PaaS 是什么,三者的区别是?

接下来我们直接直奔主题 首先,概念走起。 IaaS:基础设施服务, Infrastructure-as-a-service PaaS:平台服务,Platform-as-a-service SaaS:软件服务,Software-as-a-service IaaS 基础设施即服…

【C++】C++11的新特性

文章目录 1. C11简介2. 统一的列表初始化2.1 {}统一初始化2.2 std::initializer_list 3. 声明的新方式和范围for循环3.1 decltype3.2 auto&nullptr&范围for循环 4. STL的变化4.1 新容器4.2 新接口 1. C11简介 ​ 在2003年C标准委员会曾经提交了一份技术勘误表(简称TC1…

Java并发编程面试题

一、线程、进程、程序 进程: 我们把运行中的程序叫做进程,每个进程都会占用内存与CPU资源,进程与进程之间互相独立. 线程: 线程就是进程中的一个执行单元,负责当前进程中程序的执行。一个进程可以包含多个线程。多线程可以提高程序的并行运…

Stable Diffusion 常用主流checkpoint模型

AbyssOrangeMix2 https://civitai.com/models/4437/abyssorangemix2-sfwsoft-nsfw dosmix https://civitai.com/models/6250/dosmix Counterfeit-V3.0 https://civitai.com/models/4468/counterfeit-v30 万象熔炉 | Anything V5/Ink QteaMix 通用Q版模型 https://civitai.c…

Spring Boot 中的监控及使用

Spring Boot 中的监控及使用 Spring Boot 是一个非常流行的 Java 应用程序开发框架,它提供了一种快速构建应用程序的方法。除此之外,Spring Boot 还提供了一系列的监控功能,方便开发人员对应用程序进行监控和管理。本文将讨论 Spring Boot 中…

MachineLearningWu_第1+2章_SupervisedLearningUnsupervisedLearning

x.1 笔记 常见Supervised Learning的app,会有input和label 线性拟合做回归, 分类问题如下,当单个输入但是多个类别信息时可以简化为单轴向, 当分类问题是多输入时,可以简化为特征空间如下, *无监督算法的核…

SiLM27624系列 双通道30V, 5A/5A高速低边门极驱动器介绍

在开关电源系统中,需要利用门极驱动器来有效地驱动功率器件,实现功率器件的快速开关,以减少开关功率损耗、提高系统效率。在 GaN 等新兴的宽带隙功率器件技术中,需要快速的传输延时、精准的延迟匹配、极强的驱动能力以满足系统中高…

移动隔断地板无轨道,只需将轨道安装于天花板上

移动隔断地板无轨道设计可以提供更加灵活的空间划分和布局选择。相较于传统的固定轨道系统,只需将轨道安装在天花板上,就能实现移动隔断的收放和推动。这种设计可以避免地板上的轨道对于日常活动和清洁的干扰,并且减少了地板安装的复杂性。 在…

HDLBits刷题笔记9:Circuits.Sequential Logic.Counters + Shift Registers

Counters Four-bit binary counter module top_module (input clk,input reset, // Synchronous active-high resetoutput reg [3:0] q);always (posedge clk) beginif(reset)q < 0;elseq < q 1;end endmoduleDecade counter 建立一个计数器&#xff0c;从0计数…

二分类结局变量Logistic回归临床模型预测—— 外部数据集验证

1. 介绍 2. 基线特征 3. 单因素多因素logistic回归分析及三线表 4. 构建临床列线图模型 5. 模型评价 6. 外部数据集验证 7. 另一种发文章的办法,分训练集和测试集,分析上述3-6节的内容 外部数据集验证,就是找一个别的数据集,可以是别家医院的,也可是数据库的,但是…

机器视觉初步12:C#入门初步(有代码示例)

文章目录 基础部分概述1. 变量&#xff1a;2. 数据类型&#xff1a;3. 运算符&#xff1a;4. 控制语句&#xff1a;5. 字符串和数组&#xff1a;6. 类型转换&#xff1a;7. 输出和输入&#xff1a;8. 变量命名&#xff1a;9. 函数&#xff1a;10. 枚举值的比较&#xff1a;11. …

红旗软件与派盘互认证成功

近年来,随着数据的不断增长和扩张,云计算、大数据、人工智能等技术已成为数字化转型的推动力。在这个背景下,红旗软件和派盘之间的互认证也成为了企业用户进行数据备份和管理的理想选择。 红旗软件是由中国科学院成立的软件公司,其主要产品有红旗Linux操作系统、红旗开发工…

今日分享简单的下划线转驼峰方法

简单的下划线转驼峰方法… #代码片段分享# function underLine2CamelCase(string){return string.replace( /_([a-z])/g, function( all, letter ) {return letter.toUpperCase();}); }

为什么空间坐标系之间的线性变换关系 = 坐标轴向量堆叠?

相机模型存在4个坐标系&#xff1a;世界坐标系、摄像机坐标系、图像物理坐标系和图像像素坐标系。 光心&#xff1a;图像的中心。 光轴&#xff1a;穿过图像的光心&#xff0c;与图像平面垂直的轴。 世界坐标系(Xw,Yw,Zw)&#xff1a;是客观三维世界的绝对坐标系&#xff0c…