Spring Cloud OAuth认证中心

  在微服务架构中,由于不同的业务会拆分成不同的微服务,传统的单体项目一般是通过过滤器进行拦截校验,而微服务显然不可能分发到各个服务进行用户认证,这就需要由一个统一的地方来管理所有服务的认证信息,实现只登录一次,即可在各个服务的授权范围内进行操作;
  实现认证中心的方式有很多,这里只记录了使用OAuth2协议标准实现认证的方法;

OAuth2介绍

  OAuth是一个关于授权(authorization)的开放网络标准,在全世界得到广泛应用,目前的版本是2.0版。
OAuth 2.0 也是目前最流行的授权机制,用来授权第三方应用,获取用户数据。
详细的可参考这篇文章:http://www.ruanyifeng.com/blog/2014/05/oauth_2_0.html

OAuth 2 目前有四种授权模式:

  • 授权码模式(authorization code)
  • 简化模式(implicit)
  • 密码模式(resource owner password credentials)
  • 客户端模式(client credentials)

授权码模式

使用场景
  比如用微信登录、用 QQ 登录、用微博登录、用 Google 账号登录、用 github 授权登录等等,这些都是典型的 OAuth2 使用场景。假设我们做了一个自己的服务平台,如果不使用 OAuth2 登录方式,那么我们需要用户先完成注册,然后用注册号的账号密码或者用手机验证码登录。而使用了 OAuth2 之后,相信很多人使用过、甚至开发过公众号网页服务、小程序,当我们进入网页、小程序界面,第一次使用就无需注册,直接使用微信授权登录即可,大大提高了使用效率。因为每个人都有微信号,有了微信就可以马上使用第三方服务,这体验不要太好了。而对于我们的服务来说,我们也不需要存储用户的密码,只要存储认证平台返回的唯一ID 和用户信息即可。
  授权码模式(authorization code)是功能最完整、流程最严密的授权模式。它的特点就是通过客户端的后台服务器,与"服务提供商"的认证服务器进行互动。
处理逻辑如下图所示:
在这里插入图片描述

  1. 用户访问客户端,后者将前者导向认证服务器。
  2. 用户选择是否给予客户端授权。
  3. 假设用户给予授权,认证服务器将用户导向客户端事先指定的"重定向URI"(redirection URI),同时附上一个授权码。
  4. 客户端收到授权码,附上早先的"重定向URI",向认证服务器申请令牌。这一步是在客户端的后台的服务器上完成的,对用户不可见。
  5. 认证服务器核对了授权码和重定向URI,确认无误后,向客户端发送访问令牌(access token)和更新令牌(refresh token)。

简化模式

  简化模式(implicit grant type)不通过第三方应用程序的服务器,直接在浏览器中向认证服务器申请令牌,跳过了"授权码"这个步骤,因此得名。所有步骤在浏览器中完成,令牌对访问者是可见的,且客户端不需要认证。

密码模式

  密码模式(Resource Owner Password Credentials Grant)中,用户向客户端提供自己的用户名和密码。客户端使用这些信息,向"服务商提供商"索要授权。
  在这种模式中,用户必须把自己的密码给客户端,但是客户端不得储存密码。这通常用在用户对客户端高度信任的情况下,比如客户端是操作系统的一部分,或者由一个著名公司出品。而认证服务器只有在其他授权模式无法执行的情况下,才能考虑使用这种模式。
  一般情况下,自己内部的服务可以使用这种模式来认证;用户信息本来就在自己系统内管理的,就可以使用这种方式;
在这里插入图片描述

  1. 用户向客户端提供用户名和密码。
  2. 客户端将用户名和密码发给认证服务器,向后者请求令牌。
  3. 认证服务器确认无误后,向客户端提供访问令牌。

spring cloud有一套spring-cloud-starter-oauth2组件 ,其实是 Spring Cloud 按照 OAuth2 的标准并结合 spring-security 封装好的一个具体实现。他的密码模式就如下面所示:
在这里插入图片描述这种方式就是用来管理自己业务系统内用户认证的逻辑;采用这种方式的微服架构图如下所示:
在这里插入图片描述详细的spring-cloud-starter-oauth2集成实战,可以参考这边文章https://blog.csdn.net/AkiraNicky/article/details/124167607

客户端模式

  客户端模式(Client Credentials Grant)指客户端以自己的名义,而不是以用户的名义,向"服务提供商"进行认证。严格地说,客户端模式并不属于OAuth框架所要解决的问题。在这种模式中,用户直接向客户端注册,客户端以自己的名义要求"服务提供商"提供服务
在这里插入图片描述

  1. 客户端向认证服务器进行身份认证,并要求一个访问令牌
  2. 认证服务器确认无误后,向客户端提供访问令牌

其实在我们的企业内部,就有这种模式的使用场景;举个例子,企业内有一套业务系统A是微服务架构开发的,另一个应用系统B不属于这个微服服务体系内的,B是一个单体应用;现在应用B要调用业务系统A的某个resultful接口,业务系统A通常就是给应用A提供一个客户端id和客户端秘钥等数据来进行认证,获取token信息再进行接口调用;
如图:
在这里插入图片描述在这里插入图片描述

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

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

相关文章

西农数据结构第二次实习题目参考

T1 用顺序存储实现栈的初始化、入栈、出栈、取栈顶、判栈空操作。调用以上操作实现判断从键盘输入的括号序列是否匹配 输入描述 括导序列#(#为括号输入结束符号) 输出描述 匹配或不匹配 输入 {[()]}# 输出 匹配 #include <iostream> using namespace std; cons…

松脂醇-落叶松脂素还原酶(pinoresinol-lariciresinol reductase, PLR)克隆与鉴定-文献精读71

菘蓝中松脂醇-落叶松脂素还原酶编码基因IiPLR2的克隆与功能分析 摘要 松脂醇-落叶松脂素还原酶(pinoresinol-lariciresinol reductase, PLR)是植物中木脂素生物合成的关键酶&#xff0c;能连续催化两步反应分别生成落叶松脂素和开环异落叶松脂素。落叶松脂素等木脂素类成分是…

Unity SpriteEditor 中的图集处理功能

本文仅作笔记学习和分享&#xff0c;不用做任何商业用途 本文包括但不限于unity官方手册&#xff0c;unity唐老狮等教程知识&#xff0c;如有不足还请斧正 因为unity不只能做3d&#xff0c;还有2d游戏需要大量编辑处理图片素材&#xff0c;所以需要了解Sprite&#xff08;精灵&…

KPaaS 集成平台低代码在跨境电商行业的应用

在全球化的经济浪潮中&#xff0c;跨境电商行业蓬勃发展&#xff0c;机遇与挑战并存。随着业务规模的不断扩大和市场竞争的日益激烈&#xff0c;跨境电商企业面临着诸多复杂的业务管理和技术难题。KPaaS 业务集成扩展平台以其低代码的创新特性&#xff0c;为跨境电商行业带来了…

头歌——人工智能(机器学习 --- 决策树2)

文章目录 第5关&#xff1a;基尼系数代码 第6关&#xff1a;预剪枝与后剪枝代码 第7关&#xff1a;鸢尾花识别代码 第5关&#xff1a;基尼系数 基尼系数 在ID3算法中我们使用了信息增益来选择特征&#xff0c;信息增益大的优先选择。在C4.5算法中&#xff0c;采用了信息增益率…

银河麒麟相关

最近安装了银河麒麟server版本&#xff0c;整理下遇到的一些小问题 1、vmware安装Kylin-Server-V10-SP3-General-Release-2303-X86_64虚拟机完成后&#xff0c;桌面窗口很小&#xff0c;安装vmwaretools后解决&#xff0c;下载地址http://softwareupdate.vmware.com/cds/vmw-de…

leetcode-71-简化路径

题解&#xff1a; 1、以"/"作为分隔符对字符串进行分割得到数组names; 2、初始化一个栈stack&#xff08;python中的栈使用列表实现&#xff09;&#xff1b; 3、遍历数组names&#xff1b;如果当前元素为".."且栈不为空&#xff0c;则将弹出栈顶元素&a…

网络安全行业10大副业汇总,总有一个适合你

网络安全行业这10大副业汇总 总有一个适合你 引言 在当今的网络安全行业中&#xff0c;除了全职工作外&#xff0c;许多师傅还通过副业来增加收入、不断拓展自身技能&#xff0c;并积累更多实际操作经验&#xff0c;为职业发展增添了无限可能。 本文提供了10种适合各种类型…

JavaWeb合集15-线程局部变量ThreadLocal

十五、ThreadLocal ThreadLocal并不是一个Thread,&#xff0c;而是Thread的局部变量。 ThreadLocal为每个线程提供单独一份存储空间&#xff0c;具有线程隔离的效果&#xff0c;只有在线程内才能获取到对应的值&#xff0c;线程外则不能访问。 场景&#xff1a;通过过滤器/过…

Android13关于获取外部存储文件的相关问题及解决方案记录

Android的学习路上... 测试设备&#xff1a;vivo X90s安卓版本&#xff1a; Android13开发环境&#xff1a;AndroidStudio FlamingoSDK&#xff1a;33 最近我在Android13的环境下尝试写一个文件选择器&#xff0c;以便日后的开发使用。但是我们知道&#xff0c;从Android13 (A…

django restful API

文章目录 项目地址一、django环境安装以及初识restful1.1 安装python 3.10的虚拟环境1.2 创建django工程文件1.3 创建一个book app1.4 序列化(Django JsonResponse)1.4.1创建一个Models1.4.2 创建django的超级用户admin1.4.3 添加serializers.py生成序列化器1.5 FBV创建视图1…

Vue3 + Element Plus 封装文本超出长度显示省略号,鼠标移上悬浮展示全部内容的组件

一、背景介绍&#xff1a; 基于Vue3 Element Plus的项目&#xff0c;多处出现展示超长文本&#xff0c;为了页面美观&#xff0c;笔者决定封装成Text组件&#xff0c;实现“文本超出长度显示省略号&#xff0c;鼠标移上悬浮展示全部内容”的功能。 二、封装的Text组件 <…

Mac 下安装FastDFS

首先我们需要下载相对应的安装包&#xff1a; libfastcommonFastDFS 下载完成后我们先将其解压到桌面。 1.安装libfastcommon 我们进入到libfastcommon-master目录中执行./make.sh和sudo ./make.sh install&#xff0c;具体代码如下&#xff1a; 2.安装FastDFS 同安装libfa…

用docker Desktop 下载使用thingsboard/tb-gateway

1、因为正常的docker pull thingsboard/tb-gateway 国内不行了&#xff0c;所以需要其它工具来下载 2、在win下用powershell管理员下运行 docker search thingsboard/tb-gateway 可以访问到了 docker pull thingsboard/tb-gateway就可以下载了 3、docker Desktop就可以看到…

Elasticsearch 与 Lucene 的区别和联系

Elasticsearch 与 Lucene 的区别和联系 Elasticsearch 与 Lucene 的区别和联系一、知识背景Elasticsearch 简介Lucene 简介 二、Elasticsearch 和 Lucene 的区别适用场景性能优势和劣势架构设计的异同点 三、Elasticsearch和Lucene的联系四、Elasticsearch和Lucene的应用案例及…

ComfyUI初体验

ComfyUI 我就不过多介绍了&#xff0c;安装和基础使用可以看下面大佬的视频&#xff0c;感觉自己靠图文描述的效果不一定好&#xff0c;大家看视频比较方便。 ComfyUI全球爆红&#xff0c;AI绘画进入“工作流时代”&#xff1f;做最好懂的Comfy UI入门教程&#xff1a;Stable D…

分布式ID生成策略

文章目录 分布式ID必要性1.UUID2.基于DB的自增主键方案3.数据库多主模式4.号段模式5.Redis6.Zookeeper7.ETCD8.雪花算法9.百度(Uidgenerator)10.美团(Leaf)11.滴滴(TinyID) 分布式ID必要性 业务量小于500W的时候单独一个mysql即可提供服务&#xff0c;再大点的时候就进行读写分…

nuScenes数据集使用的相机的外参和内参

因为需要用不同数据集测试对比效果&#xff0c;而一般的模型代码里实现的检测结果可视化都是使用open3d的Visualizer在点云上画的3d框&#xff0c;展示出来的可视化效果很差&#xff0c;可能是偷懒&#xff0c;没有实现将检测结果投影到各相机的图像上&#xff0c;所以检测效果…

[ARM-2D 专题]4. 快速搭建ARM2D的PC仿真开发环境及避坑手法

有几种情况你需要使用pc仿真开发环境&#xff1a; 手上没有合适的硬件条件只想快速的了解一下ARM-2D开发过程中&#xff0c;加速开发过程&#xff0c;避免频繁的下载代码 无论如何&#xff0c;pc仿真开发环境&#xff0c;你都值得拥有。 第一步&#xff0c;先下载源代码&#…

更改USB 网卡名称

在code/kernel-6.1/drivers/net/usb/usbnet.c文件中更 有几处地都可以改 最好在添加下面一行。但是要注意同时只能用一个usb网卡&#xff0c;多个不知道会怎么样 strcpy(dev->name,“eth1”); //第三处添加 usbnet_probe (struct usb_interface *udev, const struct usb_d…