文章图片
微服务做用户认证和授权一直都是一个难点,随着OAuth2.0的密码模式被作废,更是难上加难了。今天胖哥群里的一个群友搭建用户认证授权体系的时候遇到了一些棘手的问题,这让胖哥觉得是时候分享一些思路出来了。
两种思路
通常微服务的认证和授权思路有两种:
- 所有的认证授权都由一个独立的用户认证授权服务器负责,它只负责发放Token,然后网关只负责转发请求到各个微服务模块,由微服务各个模块自行对Token进行校验处理。
- 另一种是网关不但承担了流量转发作用,还承担认证授权流程,当前请求的认证信息由网关中继给下游服务器。
文章图片
第二种结合了OAuth2体系,网关不仅仅承担流量转发功能,认证授权也是在网关层处理的,令牌会中继给下游服务。这种模式下需要搭建一个UAA(User Account And Authentication)服务。它非常灵活,它可以管理用户,也可以让受信任的客户端自己管理用户,它只负责对客户端进行认证(区别于用户认证)和对客户端进行授权。目前使用OAuth2对微服务进行安全体系建设的都使用这种方式。
文章图片
接下来分享一下我在第二种思路上的成果。
Spring Cloud Gateway 结合OAuth2提供UAA服务
用的技术有:
- 【面试|Spring Cloud Gateway整合OAuth2思路分享】Spring Cloud Gateway
- Spring Authorization Server
- Spring Security 5.0 OAuth2 Client
- OIDC 1.0
文章图片
微服务应用
当User Agent(浏览器、APP)通过网关请求资源时:
文章图片
上面执行的是一个标准的OAuth2授权码流程,Spring Cloud Gateway会把用户引导到UAA服务器的登录接口去登录。
文章图片
终端用户登录后进行授权确认,注意看F12的链路。
文章图片
用户确认
用户勾选授权并确认后,成功访问到了资源,同样看调用的链路。
文章图片
成功访问资源
授权确认提交后,再次重定向到OAuth2授权码登录流程,最终获取了资源。
我们看最终
/res/foo
的请求细节,居然没有携带Token也拿到了用户的所有权限。文章图片
这都是网关令牌中继的功劳,前端应用很好地屏蔽了JWT令牌。
如果有多个Gateway节点和UAA节点,可能要结合Spring Session去实现分布式Session以及对一些客户端信息、用户信息进行分布式管理。总结
通过上面流程的介绍,动手能力很强的小伙伴应该能实现相关的功能了。我正在总结归纳相关的知识点,基于某些原因胖哥现在还没办法给出具体的DEMO,不过这些都会在我的OAuth2专栏进行详细讲解,如果你想掌握这些高精尖的技术,就关注一下我。另外你也可以点击阅读原文直达专栏。
先自我介绍一下,小编13年上师交大毕业,曾经在小公司待过,去过华为OPPO等大厂,18年进入阿里,直到现在。深知大多数初中级java工程师,想要升技能,往往是需要自己摸索成长或是报班学习,但对于培训机构动则近万元的学费,着实压力不小。自己不成体系的自学效率很低又漫长,而且容易碰到天花板技术停止不前。因此我收集了一份《java开发全套学习资料》送给大家,初衷也很简单,就是希望帮助到想自学又不知道该从何学起的朋友,同时减轻大家的负担。添加下方名片,即可获取全套学习资料哦
推荐阅读
- java|【纯享】剑指大厂,22年最强阿里JAVA手册
- 1408. 数组中的字符串匹配 : 简单模拟题
- java|《JavaScript经典面试题》第3道(关于this指向的常见面试题)
- web前端|面试必问JavaScript基础面试题(附答案详解)
- 面试题|牛客网前端刷题(一)
- JavaScript高级语法|ES6——class类实现继承
- Android开发|Android基础第五天 | 字节跳动第四届青训营笔记
- 解决跨域问题
- vue2|vue2安装vue-router,less ,vuex的版本