文章来源:https://sourl.cn/SSnEDe
前言
微服务授权面临哪些问题
微服务常见认证方案
前言
前面我们讨论的是SpringSecurity基础部分内容,接下来我们来探讨一下SpringCloud 集成 SpringSecurity和Oauth实现微服务认证授权方案
微服务(分布式)项目常见认证方案
在微服务架构下有很多的服务,每个微应用都需要对访问进行认证检查和权限控制,客户端发起一个请求需要考虑如何让用户的认证状态通知到所有的微服务中,尤其是请求来源于多种客户端如浏览器,移动端,三方程序,服务之间访问时,微服务的授权变得更加麻烦,再加上本地Session在微服务(集群/分布式)环境中存在Session不同步的问题,所以我们微服务授权是非常非常复杂的。
Session不同步问题如图:
CAS是一种基于Cookie实现的单点登录方案,页是一个比较老的解决方案,是 Yale 大学发起的一个开源项目,旨在为 Web 应用系统提供一种可靠的单点登录方法,它分为 CAS Server端和CAS Client端,Server端负责用户的登录流程,Client端需要整合到各个系统中,它的登录流程如下:
系统A的访问流程:
浏览器请求系统A,系统A检查到没有登录,重定向到认证服务,并且携带参数service,这个参数的作用是在认证中心认证通过之后会再跳回系统A的重定向地址
认证中心验证ticket通过,向client返回对应的用户信息
浏览器(同一个浏览器)访问另外一个客户端系统B,系统B检查到没有登录,请求重定向到认证中心
认证中心ticket校验通过,返回用户信息
客户端发起请求,网关实现登录逻辑,登录信息存储到Redis,并且根据Redis的key创建一个Token
在后续服务中可以通过Token去Redis中获取认证信息。
客户端发起认证请求,使用JWT等加密方式生成安全的 Token,Token中携带了认证授权信息,然后返回给客户端,
后续服务获取到Token即可获取到用户信息
解释:
资源服务:用户对资源的访问权限检查和返回资源
如果请求需要多个资源服务共同完成,那么我们还需要考虑在服务调用的使用把Token通过请求头传递给下一个被调用的微服务进行授权
推荐阅读
最近面试BAT,整理一份面试资料《Java面试BATJ通关手册》,覆盖了Java核心技术、JVM、Java并发、SSM、微服务、数据库、数据结构等等。
获取方式:点“在看”,关注公众号并回复 Java 领取,更多内容陆续奉上。