在微服务架构中认证和授权的那些事儿

在微服务架构中认证和授权是最基础的服务能力,其中这一块行业类的标准就是OAuth2 和 SSO ,而OAuth2 和 SSO 可以归类为“用户管理和身份验证”工具,OpenID Connect 1.0是 OAuth 2.0 协议之上的一个简单身份层。

Part.1 认识OAuth 2.0

OAuth 2.0(访问委托的开放标准),它是一个授权框架,使第三方应用程序能够代表资源所有者通过协调资源所有者和 HTTP 服务之间的批准交互,或通过允许第三方应用程序获得对 HTTP 服务的有限访问权限代表自己获取访问权限;

OAuth 2.0的原理

OAuth 2.0 是一种授权协议,而不是身份验证协议。因此,它主要被设计为授予对一组资源(例如,远程 API 或用户数据)的访问权限的一种方式。

OAuth 2.0 使用访问令牌。访问令牌是代表最终用户访问资源的授权的一段数据。OAuth 2.0 没有为访问令牌定义特定格式。但是,在某些情况下,经常使用 JSON Web Token (JWT) 格式。这使令牌发行者能够在令牌本身中包含数据。此外,出于安全原因,访问令牌可能有到期日期。

OAuth 2.0的角色

角色的思想是OAuth2.0授权框架核心规范的一部分。这些定义了 OAuth 2.0 系统的基本组件,如下所示:

(1)资源所有者:拥有受保护资源并可以授予访问权限的用户或系统。

(2)客户端:客户端是需要访问受保护资源的系统。要访问资源,客户端必须持有适当的访问令牌。

(3)授权服务器:该服务器接收来自客户端的访问令牌请求,并在资源所有者成功验证和同意后发出这些请求。授权服务器公开两个端点:授权端点,它处理用户的交互式身份验证和同意,以及令牌端点,它涉及机器对机器的交互。

(4)资源服务器:保护用户资源并接收来自客户端的访问请求的服务器。它接受并验证来自客户端的访问令牌,并将适当的资源返回给它。

OAuth 2.0的范围

范围是 OAuth 2.0 中的一个重要概念。它们用于准确指定可以授予资源访问权限的原因。可接受的范围值以及它们与哪些资源相关,取决于资源服务器。

OAuth 2.0访问令牌和授权码

OAuth 2授权服务器在Resource Owner授权访问后可能不会直接返回Access Token。相反,为了更好的安全性,可以返回授权码,然后将其交换为访问令牌。此外,授权服务器还可以使用访问令牌颁发刷新令牌。与访问令牌不同,刷新令牌通常有很长的有效期,并且可以在后者到期时交换为新的访问令牌。由于刷新令牌具有这些属性,因此客户端必须安全地存储它们。

OAuth 2.0是如何工作的?

在最基本的层面上,在可以使用 OAuth 2.0 之前,客户端必须从授权服务器获取自己的凭证、_client id_ 和客户端密码,以便在请求访问令牌时识别和验证自己。

使用 OAuth 2.0,访问请求由客户端发起,例如移动应用程序、网站、智能电视应用程序、桌面应用程序等。令牌请求、交换和响应遵循以下一般流程

(1)客户端向授权服务器请求授权(授权请求),提供客户端 ID 和密码作为标识;它还提供范围和端点 URI(重定向 URI)以将访问令牌或授权码发送到。

(2)授权服务器对客户端进行身份验证并验证请求的范围是否被允许。

(3)资源所有者与授权服务器交互以授予访问权限。

(4)授权服务器使用授权代码或访问令牌重定向回客户端,具体取决于授权类型,这将在下一节中进行解释。也可以返回刷新令牌。

(5)使用访问令牌,客户端请求从资源服务器访问资源。

OAuth 2.0支持的授权类型

在 OAuth 2.0 中,授权是客户端为获得资源访问授权而必须执行的一组步骤。授权框架提供了多种授权类型来应对不同的场景:

(1)授权码授予:授权服务器返回一个一次性授权码给客户端,然后用它换取访问令牌。对于可以在服务器端安全地进行交换的传统 Web 应用程序,这是最佳选择。单页应用程序 (SPA) 和移动/本机应用程序可能会使用授权码流程。然而,这里不能安全地存储客户端机密,因此在交换期间的身份验证仅限于单独使用客户端 ID。更好的替代方法是使用 PKCE grant 的授权代码,如下所示。

(2)隐式授予:一种简化的流程,其中访问令牌直接返回给客户端。在隐式流程中,授权服务器可能会返回访问令牌作为回调 URI 中的参数或作为对表单发布的响应。由于潜在的令牌泄漏,第一个选项现已弃用。

(3)具有代码交换证明密钥 (PKCE) 的授权代码授予:此授权流程类似于授权代码授予,但具有使其对移动/本机应用程序和 SPA 更安全的额外步骤。

(4)资源所有者凭据授权类型:此授权要求客户端首先获取资源所有者的凭据,这些凭据将传递给授权服务器。因此,它仅限于完全信任的客户端。它的优点是不涉及到授权服务器的重定向,因此适用于重定向不可行的用例。

(5)客户端凭证授权类型:用于非交互式应用程序,例如自动化流程、微服务等。在这种情况下,应用程序本身通过使用其客户端 ID 和密码进行身份验证。

(6)设备授权流程:允许应用程序在输入受限设备(例如智能电视)上使用的授权。

(7)刷新令牌授予:涉及将刷新令牌交换为新访问令牌的流程。

Part.2 认识 OpenID Connect 1.0

OpenID Connect 1.0 是 OAuth 2.0 协议之上的一个简单身份层。它允许客户端根据授权服务器执行的身份验证来验证最终用户的身份,并以可互操作和类似 REST 的方式获取有关最终用户的基本配置文件信息。

OpenID Connect 允许所有类型的客户端(包括基于 Web 的客户端、移动客户端和 JavaScript 客户端)请求和接收有关经过身份验证的会话和最终用户的信息。该规范套件是可扩展的,允许参与者在对他们有意义时使用可选功能,例如身份数据加密、OpenID 提供者发现和注销。

Part.3 认识SSO

SSO(单点登录)是Buzzfeed 实现的的单点登录认证代理,BuzzFeed 开发的身份验证和授权系统旨在为访问我们员工使用的许多内部 Web 应用程序提供安全的单点登录体验。

这里推荐大家一个比较成熟的SSO的案例https://github.com/buzzfeed/sso。

SSO依靠谷歌作为其权威的 OAuth2 提供商,并根据特定的电子邮件域对用户进行身份验证。每个上游可能需要基于 Google 群组成员资格的进一步授权。

SSO背后的主要思想是“双 OAuth2”流程,其中sso-authOAuth2 提供者为sso-proxy,而 Google 是sso-auth。SSO建立在 Bitly 的开源oauth2_proxy之上。

简而言之,如果用户访问sso-proxy受保护的服务 ( foo.sso.example.com) 并且没有会话 cookie,他们将被重定向到sso-auth( sso-auth.example.com)。

如果用户没有 的会话 cookie sso-auth,系统会提示他们通过通常的 Google OAuth2 流程登录,然后重定向回sso-proxy他们现在将要登录的位置(到 foo.sso.example.com)。

如果用户确实有会话 cookie sso-auth(例如,他们已经登录bar.sso.example.com),他们将被透明地重定向回proxy他们将要登录的位置,而无需通过 Google OAuth2 流程。

sso-proxy透明地重新验证和刷新用户的会话sso-auth。

Part.4 总结

目前Spring对OAuth2和OpenID Connect1.0的支持力度还是蛮大的,比如Spring Authorization Server。

Spring Authorization Server 是一个框架,它提供OAuth 2.1和OpenID Connect 1.0规范以及其他相关规范的实现。它建立在Spring Security之上,为构建 OpenID Connect 1.0 身份提供者和 OAuth2 授权服务器产品提供安全、轻量级和可定制的基础。

Spring Security 是一个功能强大且高度可定制的身份验证和访问控制框架。它是保护基于 Spring 的应用程序的事实标准。

Spring Security 是一个专注于为 Java 应用程序提供身份验证和授权的框架。与所有 Spring 项目一样,Spring Security 的真正强大之处在于它可以轻松扩展以满足自定义需求。

关于OAuth 2.1的最新规格可以参考https://datatracker.ietf.org/doc/html/draft-ietf-oauth-v2-1-05。

关于OpenID Connect 1.0的最新规格可以参考https://openid.net/specs/openid-connect-core-1_0.html。

另外我的新书RocketMQ消息中间件实战派上下册,在京东已经上架啦,目前都是5折,非常的实惠。

https://item.jd.com/14337086.html​编辑https://item.jd.com/14337086.html

RocketMQ消息中间件实战派上下册”是我既“Spring Cloud Alibaba微服务架构实战派上下册”之后,又一本历时超过1年半的巨无霸技术实战类型的书籍。

为了提高读者阅读本书的体验性,本书总共设计了十个特色,下面我一一的给技术小伙伴阐述一下。 

【特色一】由浅到深

本书将RocketMQ的技术原理和最佳实践体系化,按照由浅到深的顺序呈现给读者,使读者可以按照章节顺序按部就班地学习。当学习完全书内容之后,读者不仅能熟悉RocketMQ的核心原理,还能充分理解RocketMQ的“根”。

【特色二】技术新

本书不仅包括RocketMQ4.x4.9.2版本)的核心原理分析和最佳实践,还包括RocketMQ5.x5.1. 0版本)的新特性分析和最佳实践。

【特色三】精心设计的主线:零基础入门,循序渐进,直至彻底掌握RocketMQ

本书精心研究了程序类、架构类知识的认知规律,全书共分为6篇:基础;进阶;高级;高并发、高可用和高性能;应用;新特性,是一条相对科学的主线,让读者快速从“菜鸟”向“RocketMQ分布式架构实战高手”迈进。

【特色四】绘制了大量的图,便于读者理解RocketMQ的原理、架构、流程 

一图胜于文,书中在涉及原理、架构、流程的地方配有插图,以便读者更加直观地理解。

【特色五】从架构师和技术专家的视角分析RocketMQ 

本书创造性地分析了RocketMQ具备高并发、高可用和高性能的功能及原理,并从架构的视角展开分析,这些也是程序员进阶为技术专家或架构师必备的技能。

以下为从架构师和技术专家的视角分析RocketMQ典型案例,读者阅读完本书之后,也能够达到这样的水准。

【特色六】不仅有原理分析,还有大量的实战案例 

本书介绍了大量的实战案例,能让读者“动起来”,在实践中体会功能,而不只是一种概念上的理解。

在讲解每一个知识模块时,我在思考:在这个知识模块中,哪些是读者必须实现的“标准动作”(实例);哪些“标准动作”是可以先完成的,以求读者能快速有一个感知;哪些“标准动作”具有一定难度, 需要放到后面完成。读者在实践完书中的案例之后,就能更容易理解那些抽象的概念和原理了。

本书的目标之一是,让读者在动手中学习,而不是“看书时好像全明白了,一动手却发现什么都不会”。通过体系化的理论和实战案例去培养读者的主动学习能力,这样本书的价值就会被最大化。 

本书相信“知行合一”的理念,而不是“只知,而不行”,避免开发人员出现眼高手低的现象。尤其是在技术面试过程中,面试官更加看重的是既懂原理,又能够主动是实践技术的技术人。

【特色七】深入剖析原理 

 本书以系统思维的方式,从业务功能视角剖析 RocketMQ 底层的技术原理,使读者具备快速阅读 RocketMQ 框架源码的能力。读者只有具备了这种能力,才能举一反三,实现更复杂的功能,应对更复杂的应用场景。

 【特色八】从运维的视角分析 RocketMQ 的最佳实践

【特色九】参与开源 

 本书向读者展示了如何修改 RocketMQ 源码,并快速验证案例分析。这样,读者可以从中学到参与开源的技能,并为后续自己能够参与开源做准备。

【特色十】双色印刷,读者体验会更好 

为了提高读者阅读本书的体验,在有上下两册的前提下(巨无霸,超过800页),出版社不吝啬印刷成本,依然采用双色印刷。

【推荐】本书的最佳学习路径 

 为了提高读者学习RocketMQ的效率,我这边结合我自身从RocketMQ小白到RocketMQ专家的经历,为读者汇总了一条最佳学习路径。

【寄语】作者寄语 

RocketMQ是我深度参与研究的一款开源消息中间件,无论是从源码,还是架构场景,我都提炼了很多最佳实践。

在开源领域,技术小伙伴可以使用的开源消息中间件非常的多,比如KafkaPulsar等,我之所以选择研究RocketMQ,除了工作内容和角色需要之外,更多的还是自己感兴趣,因此我建议技术小伙伴一定要先培养自己的兴趣,兴趣才是提升技术硬实力的第1要素。

当然我并不止研究了RocketMQ,还研究了PulsarKafka等(包括开源消息中间件生态中的主流框架),只是本书作为一本关于RocketMQ实战派的书籍,我必须要以RocketMQ为主。

假如技术小伙伴想成为Java领域的架构师或者技术专家,我强烈建议你去研究RocketMQ,它会给你带来很多意想不到的技术和架构方法论的收获,这个也是我写本书的主要目的之一。

建议技术小伙伴按照本书设计的学习路线,逐章的去阅读和实战,这样学习效果会更好。

如果技术小伙伴有技术交流的,可以通过博文视点官方的读者群找到我的联系方式,并与我沟通,我会实时的解答读者的疑问。

本文公众号“架构随笔录”

本人视频号“架构随笔录”

【博文视点】2021年度优秀作者

2021年我和博文视点合作了一本技术类型的书籍“Spring Cloud Alibaba微服务架构实战派上下册”,它是我涉足知识输出领域以来的第一本书,同时它也是我自己积累的技术池中部分技术的产出。

为了写好那本书,我几乎花费了所有的休息时间,并主动的承担了书的售后技术辅导和咨询的职责(几乎是有问必答,坚持了整整两年)。

所谓有付出总会有回报,Alibaba这本书的销量还不错,我也因此获得了博文视点颁发的2021年度优秀作者。

我很清楚,这个是博文视点为了鼓励我继续去用心写书,因此我又花了接近1年半的时间去写了RocketMQ消息中间件实战派上下册这本书。

所谓一分耕耘一份收获,我将我对RocketMQ的理解体系化的输出给喜欢技术的技术人,希望真的对大家有帮助。

 【博文视点】2023技术成长领路人

2022年,我开始涉足技术直播和技术讲师领域,并和博文视点合作几次技术直播,直播效果还不错,再加上我孜孜不倦的布道“Spring Cloud Alibaba微服务架构实战派上下册”这本书相关的技术,并且这些技术都是有助于“技术人”快速成长的,因此也获得了博文视点颁发的“2023技术成长领路人”这个技术奖项,这个奖项也是为了鼓励我继续通过技术直播的方式给技术人去布道技术,因此只要我有时间,我就会孜孜不倦的去讲和聊技术。

【四维口袋】2022 KVP最具价值技术专家 

2022年,我开始涉足企业培训和相关技术直播,并和“四维口袋”合作了几次技术直播,并荣获了2022 KVP最具价值技术专家的技术奖项。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【数据结构】C语言实现共享栈

共享栈的C语言实现 导言一、共享栈1.1 共享栈的初始化1.2 共享栈的判空1.3 共享栈的入栈1.3.1 空指针1.3.2 满栈1.3.3 入栈空间错误1.3.4 正常入栈1.3.5 小结 1.4 共享栈的查找1.5 共享栈的出栈1.6 共享栈的销毁 二、共享栈的实现演示结语 导言 大家好,很高兴又和大…

领域驱动设计——DDD领域驱动设计进阶

摘要 进阶篇主要讲解领域事件、DDD 分层架构、几种常见的微服务架构模型以及中台设计思想等内容。如何通过领域事件实现微服务解耦?、怎样进行微服务分层设计?、如何实现层与层之间的服务协作?、通过几种微服务架构模型的对比分析&#xff0…

基于Java (spring-boot)的社团管理系统

一、项目介绍 系统管理员的功能概述: ①用户管理 a.注册用户账户 当一个新用户注册时,用户填写基本信息并上传。用户基本信息包括账号、 姓名、密码、手机、地址等信息。 b.用户信息管理 管理员可以查看系统所有用户的基本信息,并修改和…

【征服redis2】redis的事务与lua

1.redis事务介绍 在前面我们介绍了redis的几种典型数据结构和应用,本文我们来看一下redis的事务问题。事务也是数据库的重要主题,熟悉关系型数据库的读者应该对事务比较了解,简单地说,事务表示一组动作,要么全部执行&…

基于Springboot的善筹网(众筹网-有报告)。Javaee项目,springboot项目。

演示视频: 基于Springboot的善筹网(众筹网-有报告)。Javaee项目,springboot项目。 项目介绍: 采用M(model)V(view)C(controller)三层体系结构,通过Spring S…

2024年全网最全春招时间线

2024年全网最全春招时间线 春招,许多同学可能会误以为这是春天才会进行。 你可能会想,期末刚考完试,先享受下寒假,再欢度春节,收些红包,甚至还能抽空去理个发型。等到春日明媚时,再参加春招活…

【数据结构】归并排序的非递归写法和计数排序

前言 💓作者简介: 加油,旭杏,目前大二,正在学习C,数据结构等👀 💓作者主页:加油,旭杏的主页👀 ⏩本文收录在:再识C进阶的专栏&#x1…

表单验证 ---- 在Vue2中使用ElementUI进行表单验证

目录 前言 给表单绑定对应属性 在data中定义数据对象和表单的定义规则 与数据对象双向绑定 对整个表单进行验证 前言 在做项目时&#xff0c;对于表单进行验证是我们必不可少的 例如 搭建一个基本的登录界面 <div class"form"><h1>登录</h1>&…

电商物流查询:未来的发展方向

在电商日益繁荣的时代&#xff0c;物流信息查询不仅关乎消费者体验&#xff0c;更影响着电商运营的效率。快速、准确地追踪物流信息至关重要。本文将简述物流信息快速追踪的价值&#xff0c;并重点介绍固乔快递查询助手这一高效查询工具及其批量查询功能。 一、物流信息快速追踪…

一、docker的安装与踩坑

目录 一、安装docker&#xff08;centos7安装docker&#xff09;1.安装环境前期准备2.参考官网安装前准备3.参考官网安装步骤开始安装docker4.运行首个容器 二、安装一些软件的踩坑1.启动docker踩坑2.安装mysql踩坑3.罕见问题 三、关于我的虚拟机 一、安装docker&#xff08;ce…

鸿蒙开发(三)理解UIAbility

前文提到过&#xff0c;在使用DevEco创建鸿蒙项目的时候&#xff0c;会选择Empty Ability&#xff0c;那么这个Ability是什么呢&#xff1f;其实对比Android Studio创建Android羡慕时选择的Empty Activity&#xff0c;感觉Harmony的Ability更像是Android的Activity&#xff0c;…

持久双向通信网络协议-WebSocket-入门案例实现demo

1 介绍 WebSocket 是基于 TCP 的一种新的网络协议。它实现了浏览器与服务器全双工通信——浏览器和服务器只需要完成一次握手&#xff0c;两者之间就可以创建持久性的连接&#xff0c; 并进行双向数据传输。 HTTP协议和WebSocket协议对比&#xff1a; HTTP是短连接&#xff0…

利用人工智能和机器人技术实现复杂的自动化任务!

这篇mylangrobot项目由neka-nat创建&#xff0c;本文已获得作者Shirokuma授权进行编辑和转载。 https://twitter.com/neka_nat GitHub-mylangrobot &#xff1a;GitHub - neka-nat/mylangrobot: Language instructions to mycobot using GPT-4V 引言 本项目创建了一个使用GPT-4…

【K8S 云原生】Kurbernets集群的调度策略

目录 一、Kubernetes的list-watch机制 1、List-watch 2、创建pod的过程&#xff1a; 二、scheduler调度的过程和策略&#xff1a; 1、简介 2、预算策略&#xff1a;predicate 3、优先策略&#xff1a; 3.1、leastrequestedpriority&#xff1a; 3.2、balanceresourceal…

爬虫利器一览

前言 爬虫&#xff08;英文&#xff1a;spider&#xff09;&#xff0c;可以理解为简单的机器人&#xff0c;如此一个“不为名利而活&#xff0c;只为数据而生&#xff0c;目标单纯&#xff0c;能量充沛&#xff0c;不怕日晒雨淋&#xff0c;不惧寒冬酷暑”的家伙&#xff0c;…

含PEMFC的热电联供系统能量管理策略Simulink仿真

1.光伏发电系统 在直流微电网中&#xff0c;光伏电池系统经过升压DC/DC变换器接入直流微电网提供功率。在不同的系统运行条件下&#xff0c;光伏电池系统有三种工作模式&#xff1a;MPPT 模式、下垂模式和空闲模式。由于光伏阵列的输出特性随着环境条件影响&#xff0c;光伏电池…

【科技素养题】少儿编程 蓝桥杯青少组科技素养题真题及解析第22套

少儿编程 蓝桥杯青少组科技素养题真题及解析第22套 1、植物的叶子多为绿色,这主要是因为它们含有 A、绿色色素 B、叶绿素 C、花青素 D、细胞 答案:B 考点分析:主要考查小朋友们生物知识的储备;叶绿素是植物叶子中的一种色素,它可以吸收太阳光中的能量并转化为植物所…

数据库多表查询练习题

二、多表查询 1. 创建 student 和 score 表 CREATE TABLE student ( id INT ( 10 ) NOT NULL UNIQUE PRIMARY KEY , name VARCHAR ( 20 ) NOT NULL , sex VARCHAR ( 4 ) , birth YEAR , department VARCHAR ( 20 ) , address VARCHAR ( 50 ) ); 创建 s…

嵌入式软件工程师面试题——2025校招社招通用(十八)

说明&#xff1a; 面试群&#xff0c;群号&#xff1a; 228447240面试题来源于网络书籍&#xff0c;公司题目以及博主原创或修改&#xff08;题目大部分来源于各种公司&#xff09;&#xff1b;文中很多题目&#xff0c;或许大家直接编译器写完&#xff0c;1分钟就出结果了。但…

Android基于Matrix绘制PaintDrawable设置BitmapShader,以手指触点为中心显示原图的圆切图,Kotlin(4)

Android基于Matrix绘制PaintDrawable设置BitmapShader&#xff0c;以手指触点为中心显示原图的圆切图&#xff0c;Kotlin&#xff08;4&#xff09; 这篇 Android基于Matrix绘制PaintDrawable设置BitmapShader&#xff0c;以手指触点为中心显示原图像圆图&#xff0c;Kotlin&am…