概览
背景
随着业务复杂性的增加,一个应用会被划分为许多子模块,这时就需要考虑为这些子模块建立共同的基础,从而来保证子模块间的无缝对接,登陆模块便是各类服务和管理系统的必备基础之一。
面对多种生产场景对认证安全的管理方式和粒度的需求,应用需要对接各种登陆协议。相对于开发人员,熟悉协议和重复性编码就成了对接登陆模块的必要工作量。
通用登陆代理服务,实现应用服务网关层(Spring Cloud Gateway)统一认证,让开发人员专注于业务开发。通用登陆代理服务接入简单,配置习惯对开发者友好,并支持主流登陆协议。
术语
- 应用:一般spring cloud gateway的一个部署对应一个通用登录服务的一个“应用”。一个应用是使用一个固定登录方式(例如cas)的系统。
- appCode:代表一个应用的唯一标识。
- sso-client:是一个spring starter,通常是网关应用依赖的二方库,通过一定的配置,用于拦截请求,验证token信息。
- sso-manager:是一个spring boot应用,用于接收sso-client的登录请求,对接不同的登录服务。
- 登录服务:指cas server,auth server,idaas等提供登录服务的应用。
逻辑架构
公共管理:实现应用管理和协议管理
适配机制:解决登陆代理对象调用多种协议不兼容问题
回调机制:代理服务处理数据后,通过认证服务协议回调用户
模板模式:解决多种协议下,相同流程不同实现,便于扩展
存储模块:解决数据持久化、非持久化存储
SDK: java SDK
OpenAPI: 暴露HTTP接口,方便多语言集成
主要功能
上面的过程演示一个接入通用登录服务的请求过程。
- 前端首次访问,不带token,请求被sso-client拦截。
- sso-client拦截后转发到sso-manager,根据网关配置的appCode,查询当前应用的登录方式,例如图中的cas。
- cas将用户重定向到登录页面,登录成功。
- cas回调sso-mananger,sso-manager生成token。
- sso-manager将token返回给sso-client。
- sso-client返回给前端redirect信息,包含token。
- 前端获取到token,并redirect到微服务。
- 前端至此带入token,通过网关访问微服务。
目前支持的登录服务有:
- CAS: 支持CAS协议的接入
- IDaaS: 支持IDaaS协议的接入
- Oauth: 支持Oauth密码模式的接入