微服务系统如何实现单点登录

根据URL路径来区分不同服务也是最常见的微服务设计方案。由于域名统一,不同服务可以通过Cookie来共享身份认证标志。这时可以直接集成认证授权服务到API Gateway中。后端服务无需再进行分别验证。

微服务系统同样也需要单点登录的模块,本文介绍下微服务架构的web应用如何实现单点登录。

子系统域名相同

对于域名相同的多个服务,要实现单点登录是最容易的。根据URL路径来区分不同服务也是最常见的微服务设计方案。由于域名统一,不同服务可以通过Cookie来共享身份认证标志。这时可以直接集成认证授权服务到API Gateway中。后端服务无需再进行分别验证。微服务系统如何实现单点登录

根据路径区分服务的微服务架构

另外一种比较常见的微服务架构,子系统使用不同的二级域名,而一级域名相同。比如系统A的域名为A.example.com,系统B的域名为B.example.com。微服务系统如何实现单点登录

根据二级域名区分子系统的微服务架构

对于这种情况,不同系统同样可以通过Cookie来共享身份认证标志。这时也可以直接集成认证授权服务到API Gateway中,后端服务无需再分别进行验证。

子系统域名不同

微服务架构中不同的服务使用不同的一级域名,这种情况不多见,一般比较大型的公司会有这种可能。域名不同就意味着不能通过共享Cookie方式来标志身份认证,因此处理起来要复杂一些。

不同域名的服务,可以理解为相互独立的系统了,前面介绍过的单点登录CAS、OAuth2都可以派上用场。下面我们列举几种解决方案。

CAS方案微服务系统如何实现单点登录

基于CAS方案的微服务单点登录

CAS单点登录过程:

  1. 请求资源
  2. 重定向到CAS认证中心
  3. 在登录页面提交登录信息,验证通过,生成登录凭证ticket
  4. 向服务端再次请求资源并带有ticket
  5. 服务端在认证中心验证ticket,验证通过,服务端创建cookie
  6. 带sessionId请求资源,获得返回内容

客户端向其他服务端请求时,会再次重定向到认证中心,此时不需要再提交登录信息,可以返回ticket。利用ticket,按照4-6步骤可以向服务端顺利请求资源。

OAuth方案微服务系统如何实现单点登录

基于OAuth2方案的微服务单点登录

OAuth2单点登录过程:

  1. 客户端向服务端请求资源
  2. 重定向到OAuth Server
  3. 在登录页面提交登录信息,验证通过,取得授权码
  4. 再次向服务端请求资源并带有授权码
  5. 服务端在Oauth Server获取token
  6. 服务端返回数据。

当客户端向其他服务端请求时,同样带上授权码。服务端按照4-6步骤可以在Oauth Server获得token后,可以向浏览器返回数据。

Kisso方案

微服务系统如何实现单点登录

Kisso是一个基于 Cookie 的 SSO 中间件,也常用于单点登录。

Kisso单点登录过程:

  1. 向服务端请求登录
  2. 重定向到Kisso Server
  3. 在登录页面提交登录信息,验证通过
  4. 向服务端再次请求登录
  5. 服务端向Kisso Server确认已登录,创建cookie
  6. 请求页面内容,服务端返回页面内容。

向其他服务端请求时,先请求登录,用户不需要重复提交登录信息,服务端会向Kisso Server确认已登录。服务端之后可以向浏览器返回数据。

方案对比

子系统域名相同的微服务架构,认证授权可以放在网关,后端可以做到无侵入。子系统域名不同的架构,上述三种方案,后端都不能做到无侵入,认证授权服务无法集成在网关中。不过也不是绝对的,我们仍然可以自定义方案来实现网关集中认证授权。微服务系统如何实现单点登录

自定义方案

自定义方案:

  1. 请求网关登录
  2. 网关返回登录页面,提交账号和密码,登录成功后返回jwtToken
  3. 验证通过后重定向到内容页面,并带有jwtToken
  4. 网关验证通过后转发到后端服务
  5. 后端服务返回内容

如果访问其他服务,同样由网关验证jwtToken,验证通过后由网关转发给对应的后端服务。

这种方案也可以做到后端无侵入,不过对API网关的要求比较高,因为所有请求都需要网关来做转发,网关的负载会比较大。

内容出处:,

声明:本网站所收集的部分公开资料来源于互联网,转载的目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。如果您发现网站上有侵犯您的知识产权的作品,请与我们取得联系,我们会及时修改或删除。文章链接:http://www.yixao.net/tech/25627.html

发表评论

登录后才能评论