来源:烽火台 日期:2021/7/18 20:51:21 浏览次数: 我要收藏
前面几篇文章介绍了单点登录的几种不同的实现方案,比如CAS、OAuth2等。微服务系统同样也需要单点登录的模块,本文介绍下微服务架构的web应用如何实现单点登录。
子系统域名相同
对于域名相同的多个服务,要实现单点登录是最容易的。根据URL路径来区分不同服务也是最常见的微服务设计方案。由于域名统一,不同服务可以通过Cookie来共享身份认证标志。这时可以直接集成认证授权服务到API Gateway中。后端服务无需再进行分别验证。
根据路径区分服务的微服务架构
另外一种比较常见的微服务架构,子系统使用不同的二级域名,而一级域名相同。比如系统A的域名为A.example.com,系统B的域名为B.example.com。
根据二级域名区分子系统的微服务架构
对于这种情况,不同系统同样可以通过Cookie来共享身份认证标志。这时也可以直接集成认证授权服务到API Gateway中,后端服务无需再分别进行验证。
子系统域名不同
微服务架构中不同的服务使用不同的一级域名,这种情况不多见,一般比较大型的公司会有这种可能。域名不同就意味着不能通过共享Cookie方式来标志身份认证,因此处理起来要复杂一些。
不同域名的服务,可以理解为相互独立的系统了,前面介绍过的单点登录CAS、OAuth2都可以派上用场。下面我们列举几种解决方案。
CAS方案
基于CAS方案的微服务单点登录
CAS单点登录过程:
客户端向其他服务端请求时,会再次重定向到认证中心,此时不需要再提交登录信息,可以返回ticket。利用ticket,按照4-6步骤可以向服务端顺利请求资源。
OAuth方案
基于OAuth2方案的微服务单点登录
OAuth2单点登录过程:
当客户端向其他服务端请求时,同样带上授权码。服务端按照4-6步骤可以在Oauth Server获得token后,可以向浏览器返回数据。
Kisso方案
Kisso是一个基于 Cookie 的 SSO 中间件,也常用于单点登录。
Kisso单点登录过程:
向其他服务端请求时,先请求登录,用户不需要重复提交登录信息,服务端会向Kisso Server确认已登录。服务端之后可以向浏览器返回数据。
方案对比
子系统域名相同的微服务架构,认证授权可以放在网关,后端可以做到无侵入。子系统域名不同的架构,上述三种方案,后端都不能做到无侵入,认证授权服务无法集成在网关中。不过也不是绝对的,我们仍然可以自定义方案来实现网关集中认证授权。
自定义方案
自定义方案:
如果访问其他服务,同样由网关验证jwtToken,验证通过后由网关转发给对应的后端服务。
这种方案也可以做到后端无侵入,不过对API网关的要求比较高,因为所有请求都需要网关来做转发,网关的负载会比较大。
我会持续更新关于物联网、云原生以及数字科技方面的文章,用简单的语言描述复杂的技术,也会偶尔发表一下对IT产业的看法,请大家多多关注,欢迎留言和转发,希望与大家互动交流,谢谢。
在百度中搜索微服务系统如何实现单点登录
在好搜中搜索微服务系统如何实现单点登录 在必应中搜索微服务系统如何实现单点登录 在搜狗中搜索微服务系统如何实现单点登录 |