微服务统一认证方案Spring Cloud OAuth2+JWT

这篇具有很好参考价值的文章主要介绍了微服务统一认证方案Spring Cloud OAuth2+JWT。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

前言

一、微服务架构下的统一认证场景

二、微服务架构下的统一认证思路

1.基于Session的认证方式

2.基于token的认证方式(主流)

三、OAuth2开放授权协议/标准

1.OAuth2介绍

2.OAuth2协议角色和流程

3.什么情况下需要使用OAuth2?

4.OAuth2的颁发Token授权方式

四、Spring Cloud OAuth2+JWT实现

1.Spring Cloud OAuth2介绍

2.Spring Cloud OAuth2构建微服务统一认证服务思路

总结



前言

首先我们来明确一下什么叫"认证"

        "认证"就是验证用户的合法身份,比如输入用户名和密码,系统会在后台验证用户名和密码的正确性,通过后才能够进行后续操作,访问受保护的资源。


一、微服务架构下的统一认证场景

        分布式系统下面由一系列微服务构成,每个微服务都提供着用户所需要的资源,而这些资源都是受保护的,也就是说每一个微服务都会有认证需求。

        如果我们在每一个服务中都实现一套认证逻辑的话代码就会非常冗余,而且访问不同的服务都需要重复登录验证这样很不友好,这时候就需要统一认证。

        考虑分布式系统共享性的特点,可以由一个独立的认证服务处理系统认证的请求,不同服务间的资源调用只需要一次认证,就是我们常说的sso(单点登录),而分布式环境下的统一认证也是和sso的场景是一样的。

        统一认证往往是一种颁发令牌的方式,用户第一次请求过来要求用户到认证服务进行登录验证,认证通过之后会颁发一个令牌,这个令牌就好比一个通行证,每次来请求后台的这些为服务资源的时候都带着这个令牌,然后验证这个令牌是否有效,如果有效就放行。

如下图:

微服务统一认证方案Spring Cloud OAuth2+JWT

二、微服务架构下的统一认证思路

1.基于Session的认证方式

        在分布式的环境下,基于Session的认证会出现一个问题,每一个应用服务都需要再Session中储存用户身份信息,通过负载均衡将本地的请求分配到另一个应用服务需要将Session信息带过去,否则会重新认证。我们是用Session、Session粘贴等方案。

        但Session方案也有缺点,在日益复杂的互联网环境和系统架构下是存在一些问题的。

        比如使用Session就会涉及到SessionId,而SessionId是储存在Cookie中的,现在的客户端形式都非常丰富,有PC端、移动端等, PC端浏览器对Cookie的支持比较OK,但是移动端对Cookie的支持就不好了,此时就无法再用Session方案来实现统一认证了。

2.基于token的认证方式(主流)

        基于token的认证方式,服务端不用存储认证数据,因为登录成功后用户的数据会放到Session中,易维护扩展性强,客户端可以把token存放在任意地方,并且可以实现web和app的统一认证机制。

        但是token方式的缺点也很明显,token由于自身包含信息还有一些用户信息,因此一般数据量较大,而且每次请求都会传递token,因此比较占用带宽。另外,token的签名验证操作也会给cpu带来额外的处理负担。

三、OAuth2开放授权协议/标准

1.OAuth2介绍

        OAuth(开放授权)是一个开放协议/标准,允许用户授权第三方应用访问他们储存在另外的服务提供者上的信息,而不需要将用户名和密码提供给第三方应用或分享他们数据的所有内容。

结合"使用QQ登录拉钩"这一场景拆分理解这句话就是:

用户:我们自己

第三方应用:拉勾网

另外的服务提供者:QQ

OAuth2是OAuth协议的延续版本,但不向后兼容OAuth1,即完全废止了OAuth1。

2.OAuth2协议角色和流程

XX网站如果要开发QQ登录这个功能的话,那么XX网是需要提前到QQ平台登记的。

1)XX网登记到---->QQ平台

2)QQ平台会颁发一些参数给XX网,后续上线进行授权登录的时候(弹出的QQ登录的授权页面)需要携带这些参数

client_id:客户端id(QQ最终相当于一个认证授权服务器,XX网就相当于一个客户端,所以会给一个客户端id),相当于账号。

secret:相当于密码。

微服务统一认证方案Spring Cloud OAuth2+JWT


微服务统一认证方案Spring Cloud OAuth2+JWT

资源拥有者(Resource Owner):可以理解为用户自己

客户端(Client):我们想登录的XX网站或应用

认证服务器(Authorization Server):可以理解为微信或者QQ

资源服务器(Resource Server):可以理解为微信或者QQ

3.什么情况下需要使用OAuth2?

        第三方授权登录的场景:比如我们经常登录一些网站或者应用的时候,可以选择使用第三方授权登录的方式,比如:微信授权登录、QQ授权登录等,这是典型的OAuth2的使用场景。

        单点登录的场景:如果项目中有很多的微服务或者公司内部有很多服务,可以专门做一个认证中心(充当认证平台角色),所有的服务都要到这个认证中心做认证,只做一次登录,就可以在多个授权范围内的服务中自由串行。

4.OAuth2的颁发Token授权方式

1)授权码(authorization code)

2)密码式(password)

3)隐藏式(implicit)

4.客户端凭证(client credentials)

授权码模式使用到了回调地址,是最复杂的授权方式,微博、微信、QQ等第三方登录就是这种模式。我们重点来了解接口对接中常用的password密码模式(提供用户名+密码换取token)。

四、Spring Cloud OAuth2+JWT实现

1.Spring Cloud OAuth2介绍

        Spring Cloud OAuth2是Spring Cloud体系对OAuth2协议的实现,可以用来做多个微服务的统一认证(验证身份合法性)授权(验证权限)。通过向OAuth2服务(统一认证授权服务)发送某个类型的grant_type进行集中认证和授权,从而获得access_token(访问令牌),而这个token是受其他微服务信任的。

注意:使用OAuth2解决问题的本质是,引入了一个认证授权层,认证授权层连接了资源的拥有者,在授权层里面,资源的拥有者可以给第三方应用授权去访问我们的某些受保护资源。

2.Spring Cloud OAuth2构建微服务统一认证服务思路

微服务统一认证方案Spring Cloud OAuth2+JWT

注意:在我们统一认证的场景中,Resoure Server其实就是我们的各种受保护的微服务,微服务中的各种API访问接口就是资源,发起http请求的浏览器就是Client客户端(对应为第三方应用)

总结

学习使人emo....文章来源地址https://www.toymoban.com/news/detail-408991.html

到了这里,关于微服务统一认证方案Spring Cloud OAuth2+JWT的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Spring Gateway+Security+OAuth2+RBAC 实现SSO统一认证平台

    背景:新项目准备用SSO来整合之前多个项目的登录和权限,同时引入网关来做后续的服务限流之类的操作,所以搭建了下面这个系统雏形。 : Spring Gateway, Spring Security, JWT, OAuth2, Nacos, Redis, Danymic datasource, Javax, thymeleaf 如果对上面这些技术感兴趣,可以继续往下阅读 如

    2024年02月13日
    浏览(56)
  • 搭建spring security oauth2认证授权服务器

    下面是在spring security项目的基础上搭建spring security oauth2认证授权服务器 spring security oauth2认证授权服务器主要需要以下依赖 Spring Security对OAuth2默认可访问端点 ​/oauth/authorize​ ​​:申请授权码code,涉及类​ ​AuthorizationEndpoint​ ​ ​/oauth/token​ ​​:获取令牌token,涉及类​

    2024年01月21日
    浏览(57)
  • Spring Boot OAuth2 认证服务器搭建及授权码认证演示

    本篇使用JDK版本是1.8,需要搭建一个OAuth 2.0的认证服务器,用于实现各个系统的单点登录。 这里选择Spring Boot+Spring Security + Spring Authorization Server 实现,具体的版本选择如下: Spirng Boot 2.7.14 , Spring Boot 目前的最新版本是 3.1.2,在官方的介绍中, Spring Boot 3.x 需要JDK 17及以上的

    2024年02月15日
    浏览(49)
  • SpringBoot 基于 OAuth2 统一身份认证流程详解

    了解OAUTH2统一认证基本概念 了解OAUTH2协议流程 了解OAUTH2各种模式类型 了解Spring Security OAuth设计 2. 分析 传统登陆认证介绍 单点登陆认证介绍 OAuth2简介 OAuth2角色 OAuth2协议流程介绍 OAuth2授权类型 OAuth2授权码模式流程 OAuth2简化模式 OAuth2密码模式 OAuth2客户端模式 Spring Security

    2024年02月15日
    浏览(58)
  • spring cloud、gradle、父子项目、微服务框架搭建---spring secuity oauth2、mysql 授权(九)

    https://preparedata.blog.csdn.net/article/details/120062997 新建两个服务 1.授权服务 端口号:11007 2.资源服务 端口号:11004 资源服务可以是订单服务、用户服务、商品服务等等 当然这两个服务也可以合并到一起, 依次顺序AuthorizationServerConfiguration、ResourceServerConfig、WebSecurityConfiguration;

    2024年02月10日
    浏览(38)
  • java版Spring Cloud+Mybatis+Oauth2+分布式+微服务+实现工程管理系统

     鸿鹄工程项目管理系统 Spring Cloud+Spring Boot+Mybatis+Vue+ElementUI+前后端分离构建工程项目管理系统 1. 项目背景 一、随着公司的快速发展,企业人员和经营规模不断壮大。为了提高工程管理效率、减轻劳动强度、提高信息处理速度和准确性,公司对内部工程管理的提升提出了更高

    2024年02月07日
    浏览(48)
  • 权限认证SpringCloud GateWay、SpringSecurity、OAuth2.0、JWT一网打尽!

    1.它是如何工作的? ​ 客户端向 Spring Cloud Gateway 发出请求。如果Gateway处理程序映射确定一个请求与路由相匹配,它将被发送到Gateway Web处理程序。这个处理程序通过一个特定于该请求的过滤器链来运行该请求。过滤器被虚线分割的原因是,过滤器可以在代理请求发送之前和

    2024年04月08日
    浏览(46)
  • Spring Authorization Server入门 (八) Spring Boot引入Security OAuth2 Client对接认证服务

    在之前的文章中实现了一个认证服务,并且添加了一些自定义的内容,现在暂时没想到认证服务的新内容,本篇文章就先写一下客户端对接的吧,水一篇。 当用户通过客户端去访问一个受限的资源时,客户端会检测是否有登录信息,没有登录信息会重定向至认证服务器去请求

    2024年02月21日
    浏览(47)
  • spring-security -oauth2 整合 JWT

    在这个基础上,进行整合。 spring security oauth2学习 -- 快速入门_本郡主是喵的博客-CSDN博客 先把  reids,common-pools  等依赖删掉。 删掉redis的下相关配置 1.1 导入依赖 1.2 核心代码 创建 jwtTokenConfig.java 在 AuthenticationServer.java 里面新增这些。  运行,启动!  复制这个token去官网解析

    2024年02月09日
    浏览(57)
  • Spring Oauth2.0 自定义认证模式

    在特定场景下,可能Oauth2自带的4种认证模式可能满足不了我们日常的使用,那么今天就为大家带来Oauth2自定义认证模式。 知道你们肯定没耐心读完(总结一句话就是授权用的),有耐心的可以读完下面的内容介绍: 首先呢在这之前我们要搞清楚什么是Oauth , OAuth 是一个开放标准,该

    2024年02月16日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包