B094-人力资源项目-微服务授权Oauth2

news2025/1/23 11:34:46

目录

      • 背景
      • OAUTH2
        • 总体流程
        • Oauth2授权码模式
          • oauth2的三方授权流程图
          • 案例演示
          • 代码讲解-整合oauth2+springsecurity+jwt
            • 先创建一个用于认证的服务
            • 增加AuthorizationServerConfig
          • 模块总结
          • 认证服务整合zuul
            • 获取令牌
            • 加入网关后的变化
            • 代码详解
            • 测试

背景

微服务架构下应用散步在不同的服务器上,不是一个tomcat ,不能再基于Session
不同的服务不同的功能,都要有权限控制,不能再基于Session用Security

微服务权限控制用Redis:
微服务用Redis做权限控制数据不好存
要查Redis,
权限变动时数据库与redis需要同步,redis不好改,如果失败后果严重

微服务权限控制用JWT的优势:
不用查数据库,Token校验时能用RSA公钥顺利解析就可放行
实时,数据如权限发生变化后重新登录时不用与别的服务同步,旧jwt过期后生成新JWT把权限存到载荷中就行了
安全

OAUTH2

主要做第三方授权,解决微服务不能再基于Session用Security的问题

总体流程

在这里插入图片描述
微服务中有专门的服务做认证和生成令牌

网关校验Token是否是有效用户

资源服务中用Security做权限控制,资源服务会解析令牌,拿到用户的权限列表,然后赋值给Security,对于资源服务来说就是单体结构,

资源服务与资源服务之间也是双重校验 -> 检验token,校验权限

微信OpenId:微信号的加密字符串

Oauth2授权码模式

oauth2的三方授权流程图

在这里插入图片描述
为什么给授权码不直接给令牌?为了控制访问权限

案例演示

1.用户登录,2.用户点击授权,3.拿到token令牌

代码讲解-整合oauth2+springsecurity+jwt
先创建一个用于认证的服务

类似原来的写法,能跳转登录界面和登录成功

见 my-hrm-itsource\hrm-security-parent\security-auth-server-2001
和 typora文档 1.1 创建一个用于认证的服务

变化点:
增加oauth2依赖包
security 主配置文件 WebSecurityConfig 配置认证管理器交给spring管理,授权模式为“password”时会用到,取代原来的两个自定义过滤器,不影响登录成功

增加AuthorizationServerConfig

AuthorizationServerConfig是用于oauth2整合security的配置类

根据之前案例回顾思路和流程:
在这里插入图片描述
上述流程总结:
1.用户登录,2.用户点击授权,3.拿到token令牌
对于oauth2就两步,1.用户点击“授权”操作后得到授权码,2.根据授权码换token令牌

oauth2整合的核心配置文件深度剖析:
即理解AuthorizationServerConfig如何实现上述流程
见typora文档

模块总结

在这里插入图片描述
tips:如何不涉及第三方授权也可以不用oauth2,只用SpringSecurity+JWT+RSA做微服务授权

认证服务专门用来生产令牌,只有在登录时进入该服务,其他资源服务集成Security解析令牌并设置到Security框架中

但是如果认证服务升级比如用到oauth2其他功能,其他资源服务不知道
–> 都做认证和授权,加入网关来统一负责认证

权限控制由授权注解完成,授权注解生效需要Security框架或Security的认证管理器中有权限列表信息

请添加图片描述
主体思路
登录时进入认证服务,查数据库信息生成令牌
访问各资源前都要先进入网关,由网关解析令牌看是否合法,合法就放行并传送令牌到要转发的资源服务中
资源服务解析令牌,将权限列表设置到Security框架中,然后授权注解生效

认证服务整合zuul

资源服务都需要在网关中进行注册,注册之后前端能看到的地址只有网关一个

获取令牌

1.浏览器输入http://localhost:2020/servers/auth/oauth/authorize?client_id=webapp&response_type=code&redirect_uri=http://www.baidu.com会转发到http://192.168.43.82:2001/login.html进行登录
2.登录后再输入http://localhost:2020/servers/auth/oauth/authorize?client_id=webapp&response_type=code&redirect_uri=http://www.baidu.com还是要一直登录,(加了网关就会这样 服务端口不一样session不共享),

1.只能像以前先输入http://localhost:2001/oauth/authorize?client_id=webapp&response_type=code&redirect_uri=http://www.baidu.com,跳转登录完成登录,
2.再次输入http://localhost:2001/oauth/authorize?client_id=webapp&response_type=code&redirect_uri=http://www.baidu.com就会进入授权页面,点授权后会收到授权码
3.再通过http://localhost:2001/oauth/token?client_id=webapp&client_secret=secret&grant_type=authorization_code&code=iOEIFE&redirect_uri=http://www.baidu.com 获取令牌

由于上述第二步的问题造成授权码模式不好用所以换一种方式,如换为密码模式,直接postman输入http://localhost:2020/servers/auth/oauth/token?client_id=webapp&client_secret=secret&grant_type=password&redirect_uri=http://www.baidu.com&username=zs &password=123 获取令牌(不用再重复登录)

加入网关后的变化

1.不再直接访问认证资源服务拿令牌,改走网关转发认证资源服务拿令牌
2.访问资源服务先经过网关,校验令牌合法性(是否能正常解析)
3.资源服务接收和解析令牌,通过oauth2存到Security中,不用再重写usernamepassword和basic过滤器

代码详解

见typora文档 2.1 zuul整合aouth2 与 工程中
oauth2依赖包已整合内嵌了Security和JWT依赖

测试

1.通过oauth2的密码模式,来测试是否可以获取token令牌

2.通过网关访问资源服务
oauth2生成的令牌与手动生成的令牌不一样,会有一个令牌的类型,所以在请求头的Authorization的令牌值前要加上令牌类型如“bearer”
在这里插入图片描述
3.通过网关访问资源服务后再用feign调用其他资源服务

这种情况下两个资源服务中的权限都要具备才能访问成功,并要自定义拦截器解决feign请求丢失请求头的问题

代码详解分别见typora文档2.2和resource-server-security-feign-common工程

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

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

相关文章

DC电源模块对电磁干扰的影响

BOSHIDA DC电源模块对电磁干扰的影响 DC电源模块是一种常用的电源转换设备,可以将交流电转换成直流电,并通过电路电子元件对电压、电流等参数进行调整,以满足外部设备对电源的需求。然而,由于DC电源模块自身的工作特性&#xff…

Deep Java Library(四)使用DJL Serving部署JAVA模型 For Windows

1.下载Windows版DJL Serving Windows版DJL Serving下载地址: https://publish.djl.ai/djl-serving/serving-0.23.0.zip 下载下来是一个zip压缩包,大约50M左右,目前最新版本为0.23.0 2.安装DJL Serving 解压serving-0.23.0.zip后目录如下 …

网络技术七:命令行基础

命令行操作基础 命令类型 常见设备管理命令 H3C路由交换产品连接方法 使用console线本地连接 协议Serial,接口com口,波特率9600 适用于设备的初次调试 使用Telnet远程访问 适用于设备上架配置好后的维护管理 使用SSH远程访问 数据传输过程加密&…

设计模式系列-外观模式

一、上篇回顾 上篇我们主要讲述了创建型模式中的最后一个模式-原型模式,我们主要讲述了原型模式的几类实现方案,和原型模式的应用的场景和特点,原型模式 适合在哪些场景下使用呢?我们先来回顾一下我们上篇讲述的3个常用的场景。 1…

聚观早报|全球AI领域投资总额暴降;哈啰租车开启假期早鸟预定

【聚观365】9月7日消息 全球AI领域投资总额暴降 哈啰租车开启假期早鸟预定 微信上线“腾讯混元助手”小程序 腾讯“QQ群恢复”功能下线 一嗨租车1.1万个直营网点接入滴滴APP 全球AI领域投资总额暴降 媒体报道称,科技巨头Meta(原Facebook&#xff…

TCP/IP基础

前言: TCP/IP协议是计算机网络领域中最基本的协议之一,它被广泛应用于互联网和局域网中,实现了不同类型、不同厂家、运行不同操作系统的计算机之间的相互通信。本文将介绍TCP/IP协议栈的层次结构、各层功能以及数据封装过程,帮助您…

js-14---什么是事件代理?应用场景是什么?

1、事件代理是什么? 事件代理,通俗来讲就是把一个元素响应事件(click,keydown…)的函数委托到另一个元素。 事件流都会经过三个阶段:捕获阶段–>目标阶段----->冒泡阶段 事件委托就是在冒泡阶段完成&…

Fiddler安装与使用教程(2) —— 软测大玩家

😏作者简介:博主是一位测试管理者,同时也是一名对外企业兼职讲师。 📡主页地址:【Austin_zhai】 🙆目的与景愿:旨在于能帮助更多的测试行业人员提升软硬技能,分享行业相关最新信息。…

AI新时代,新华三存储新思考

在数字经济蓬勃发展下,数据正在重塑社会运行模式,推动百行百业的创新发展,成为经济发展的关键驱动力。如今数据成为企业的重要资产,企业希望通过数据了解市场和客户的需求来快速决策,这不仅需要数据高效流转&#xff0…

Python爬取电影信息:Ajax介绍、爬取案例实战 + MongoDB存储

Ajax介绍 Ajax(Asynchronous JavaScript and XML)是一种用于在Web应用程序中实现异步通信的技术。它允许在不刷新整个网页的情况下,通过在后台与服务器进行数据交换,实时更新网页的一部分。Ajax的主要特点包括: 异步通…

【解决】mysqladmin flush-hosts

问题 mysql出现 mysqladmin flush-hosts,是因为其他客户机连接错误次数过多时,mysql会禁止客户机连接。 解决方法 1、进入服务器数据库,打开数据库命令行界面输入 flush hosts; 此时便可连接 2、可以.修改mysql配置文件,在[…

SpringBoot项目--电脑商城【上传头像】

一、易错点 1.错误写法: 把文件存到数据库中,需要图片时访问数据库,数据库将文件解析为字节流返回,最后写到本地的某一个文件.这种方法太耗费资源和时间了 2.正确写法: 将对应的文件保存在操作系统上,然后再把这个文件路径记录下来,因为在记录路径的…

重生奇迹通关恶魔广场攻略篇

初次进入重生奇迹MU的血色城堡,你可能会对里面不断刷新出来的怪物产生一种密集恐惧症,但是请相信一点,那就是恶魔广场里面的怪物更多,而且品种还不重复,由低至高,轮番刷新,一波又一波……在我看…

Linux部署kettle并设置定时任务

一.安装Kettle linux中使用kettle时首先需要jdk环境,这里就不概述linux中jdk的安装与配置了。 1.首先将kettle压缩包放入linux并解压 unzip data-integration.zip kettle安装路径为:/root/Kettle9.3/data-integration 设置权限 chmod -R 755 /root/Kettle9.3/d…

Allegro画原理图时不能用的非法字符,你知道吗?

Cadence Allegro是一款电子设计自动化工具,常用于原理图绘制和电路设计,在使用Allegro画原理图时,电子工程师可能为了确保文件的准确性和稳定性,能够顺利进行后续的PCB设计和制造,需要注意这些非法字符,那么…

提高 Web 开发效率的10个VS Code扩展插件,你知道吗?

前言 一个出色的开发工具可以显著提高开发人员的开发效率,而优秀的扩展插件则能更进一步地提升工具的效率。在前端开发领域,VSCode毫无疑问是目前最受欢迎的开发工具。为了帮助前端开发人员提高工作效率,今天小编将向大家推荐10个强大的VSCo…

TSINGSEE青犀视频AI智能算法平台电动车入梯检测解决方案

一、方案背景 随着大众的出行要求逐渐提升,交通拥堵现象也随处可见,电动车出行,就成了大家的首选。随着电动车数量的激增,众多用户为了个人方便,大多在室内停放或充电,有的甚至停放在走道、楼梯间等公共区…

无涯教程-JavaScript - BITOR函数

描述 BITOR函数返回两个数字的按位"或"。 语法 BITOR (number1, number2)争论 Argument描述Required/OptionalNumber1Must be in decimal form and greater than or equal to 0.RequiredNumber2Must be in decimal form and greater than or equal to 0.Required…

基于Java+SpringBoot+Vue前后端分离青年公寓服务平台设计和实现

博主介绍:✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专…

vue基础知识七:SPA首屏加载速度慢的怎么解决?

一、什么是首屏加载 首屏时间(First Contentful Paint),指的是浏览器从响应用户输入网址地址,到首屏内容渲染完成的时间,此时整个网页不一定要全部渲染完成,但需要展示当前视窗需要的内容 首屏加载可以说…