微服务做用户认证和授权一直都是一个难点,随着OAuth2.0的密码模式被作废,更是难上加难了。今天胖哥群里的一个群友搭建用户认证授权体系的时候遇到了一些棘手的问题,这让胖哥觉得是时候分享一些思路出来了。

两种思路

通常微服务的认证和授权思路有两种:

  • 所有的认证授权都由一个独立的用户认证授权服务器负责,它只负责发放Token,然后网关只负责转发请求到各个微服务模块,由微服务各个模块自行对Token进行校验处理。
  • 另一种是网关不但承担了流量转发作用,还承担认证授权流程,当前请求的认证信息由网关中继给下游服务器。

第一种非常简单,而且我在多个微服务项目中都是这样设计的。如果你从来没有设计过,我其实建议按这个思路去做,你只需要搞一个负责管理用户、角色权限的服务器,其它的微服务模块都作为资源服务器自行和这个用户授权服务器进行交互,加上三户模型体系就足以应对各种场景了。

第二种结合了OAuth2体系,网关不仅仅承担流量转发功能,认证授权也是在网关层处理的,令牌会中继给下游服务。这种模式下需要搭建一个UAA(User Account And Authentication)服务。它非常灵活,它可以管理用户,也可以让受信任的客户端自己管理用户,它只负责对客户端进行认证(区别于用户认证)和对客户端进行授权。目前使用OAuth2对微服务进行安全体系建设的都使用这种方式。

接下来分享一下我在第二种思路上的成果。

Spring Cloud Gateway 结合OAuth2提供UAA服务

用的技术有:

  • Spring Cloud Gateway
  • Spring Authorization Server
  • Spring Security 5.0 OAuth2 Client
  • OIDC 1.0

大致的思路

UAA服务器自然由 Spring Authorization Server承担。它负责整个用户的管理,当然你还可以分离一个专门的用户服务器,只不过UAA需要通过Spring Cloud OpenFeign和用户服务通信;另外它还是一个OAuth2授权服务器,管理OAuth2客户端,处理OAuth2授权。重点来了,网关Gateway需要作为OAuth2客户端注册到UAA服务器,并作为一个OAuth2客户端。

微服务应用

User Agent(浏览器、APP)通过网关请求资源时:

上面执行的是一个标准的OAuth2授权码流程,Spring Cloud Gateway会把用户引导到UAA服务器的登录接口去登录。

终端用户登录后进行授权确认,注意看F12的链路

用户确认

用户勾选授权并确认后,成功访问到了资源,同样看调用的链路。

成功访问资源

授权确认提交后,再次重定向到OAuth2授权码登录流程,最终获取了资源。

我们看最终/res/foo的请求细节,居然没有携带Token也拿到了用户的所有权限。

这都是网关令牌中继的功劳,前端应用很好地屏蔽了JWT令牌。

如果有多个Gateway节点和UAA节点,可能要结合Spring Session去实现分布式Session以及对一些客户端信息、用户信息进行分布式管理。

总结

通过上面流程的介绍,动手能力很强的小伙伴应该能实现相关的功能了。

Spring Cloud Gateway 结合OAuth2提供UAA服务相关推荐

  1. Spring Cloud Gateway 结合 OAuth2 提供 UAA 服务,来袭。

    微服务做用户认证和授权一直都是一个难点,随着 OAuth2.0 的密码模式被作废,更是难上加难了.今天胖哥群里的一个群友搭建用户认证授权体系的时候遇到了一些棘手的问题,这让胖哥觉得是时候分享一些思路出 ...

  2. 实战干货!Spring Cloud Gateway 整合 OAuth2.0 实现分布式统一认证授权!

    今天这篇文章介绍一下Spring Cloud Gateway整合OAuth2.0实现认证授权,涉及到的知识点有点多,有不清楚的可以看下陈某的往期文章. 文章目录如下: 微服务认证方案 微服务认证方案目 ...

  3. Spring Cloud Alibaba 服务门户:Spring Cloud Gateway 如何把好微服务的大门

    上一讲我们学习了 Dubbo 是如何与 Nacos 协同作业.通过对比 RESTful 与 RPC,我们介绍了两种通信方式的区别,再通过实例讲解如何将 Dubbo 与 Nacos 进行整合.但你是否发 ...

  4. SpringCloud Alibaba 实战之《服务门户:Spring Cloud Gateway 如何把好微服务的大门》

    上一讲我们学习了 Dubbo 是如何与 Nacos 协同作业.通过对比 RESTful 与 RPC,我们介绍了两种通信方式的区别,再通过实例讲解如何将 Dubbo 与 Nacos 进行整合.但你是否发 ...

  5. Spring Cloud Data Flow整合Cloudfoundry UAA服务做权限控制

    我最新最全的文章都在 南瓜慢说 www.pkslow.com ,欢迎大家来喝茶! 1 前言 关于Spring Cloud Data Flow这里不多介绍,有兴趣可以看下面的文章.本文主要介绍如何整合D ...

  6. 微服务接入oauth2_微服务权限终极解决方案,Spring Cloud Gateway+Oauth2实现统一认证和鉴权!...

    最近发现了一个很好的微服务权限解决方案,可以通过认证服务进行统一认证,然后通过网关来统一校验认证和鉴权.此方案为目前最新方案,仅支持Spring Boot 2.2.0.Spring Cloud Hox ...

  7. 微服务网关spring cloud gateway入门详解

    1.API网关 API 网关是一个处于应用程序或服务( REST API 接口服务)之前的系统,用来管理授权.访问控制和流量限制等,这样 REST API 接口服务就被 API 网关保护起来,对所有的 ...

  8. Spring Cloud Gateway整合Nacos实现服务路由及集群负载均衡

    目录 一.序言 二.代码示例 1.父工程spring-cloud-gateway-learning 2.子工程spring-cloud-api-gateway (1) pom.xml (2) 配置文件 ...

  9. Spring.Cloud.Gateway无法使用lb调用服务

    最近在使用nacos与gateway的时候,出现使用Spring.Cloud.Gateway的网关功能进行服务转发时,按照官网文档使用"lb"一直无法实现服务的调用.查了很多资料才 ...

最新文章

  1. python读取红外图
  2. python 画柱状图-Python 使用 matplotlib 画柱状图教程
  3. HarmonyOS应用开发——使用HUAWEI DevEco Studio创建第一个程序 HELLO WORLD!
  4. 单片机6年想转嵌入式Linux ,不知如何下手?
  5. background复合属性顺序_CSS有哪些好用的字体属性?
  6. c#: 任务栏进度显示(TaskbarManager)
  7. Spring mvc项目导出jar包无法识别正常映射问题
  8. 新型冠状病毒数据抓取及整理详细流程
  9. 手把手带你走进卷积神经网络!
  10. java子弹集合_Java使用线程并发库模拟弹夹装弹以及发射子弹的过程
  11. Spring Boot 对接微信V3支付(附源码)
  12. Matlab滤波器设计与滤波器特性分析(sptool、filterdesigner)
  13. STM32与S3C2440的区别
  14. Intel Edison 基础开发之配置第一个小程序
  15. 从一个远程服务器的mysql数据库表的数据复制到本地电脑mysql数据库表,两张表结构一样就是复制数据...
  16. 深度 GHOST XP SP3 纯净版 2013 06
  17. 开箱 | 小度智能音箱初体验
  18. k-最近邻聚类k-Nearest Neighbor
  19. 利用logisim-evolution软件学习数字电路(一)
  20. Java语言程序设计基础篇(第十版 梁勇著)课后习题答案 - 第二章

热门文章

  1. 【嵌入式基础小知识】详解单片机中的程序和变量是如何分布的以及一些注意事项
  2. IT老齐架构300讲笔记(047) 避坑分享财Z部金财平台用主键用了UUID后出现的问题
  3. 双翌视觉MasterAlign——CCD自动对位手表贴合案例
  4. Django request对象
  5. 计算机硬件系统 思维导图
  6. VMware kali网卡的连接
  7. 【Matting】MODNet:实时人像抠图模型-NCNN C++量化部署
  8. 遍历set、tuple、list哪个速度最快呢?
  9. 【JVM】JVM07(类加载阶段详细解析)
  10. Babel 都 7 了,还不来了解下?