SSO 单点登录
前后端分离模式下实现单点登录功能。
流程
假设有两个应用服务sso-client1、sso-client2,以及一个认证服务 sso-server,为方便起见,下述过程中分别简写为 SC1、SC2、SS。
客户端访问
SC1首页,向SC1发起请求,验证当前是否已登录(登录状态是否有效)SC1验证登录状态:通过web请求SS进行身份验证 ,如果有效,则返回用户信息结束 如果无效 则跳转到登录路由,在登录路由页面, 先请求SC1获取认证中心地址,(如/sso/auth)SC后台拼接地址返回,前端接受到地址,在回调里转向到该地址(eg:http://xxx/sso/auth?redirectUrl=xxx.com?back=xxx.com) 此时,SS接受到认证请求,跳转到SS的默认登录页面(如:/sso-login),进行登录后(此时SS的前端页面会缓存登录成功后的token),派发ticket并重定向到 上述的前端页面,前端页面加载时 判断ticket是否存在,若存在,则使用ticket值访问SC1接口,验证身份并拿到token,完成登录在上述前提下,客户端访问
SC2首页,SC2服务端验证当前是否已登录,未登录,则跳转到SS的登录页, 此时由于已经有了token, 则无需输入用户名密码,自动生成ticket,跳转到SC2的回调地址,SC2服务端拿到ticket,调用SS接口验证ticket并换取token,返回到SC2前端页面,SC2前端缓存token,后续接着访问其他业务接口
SSO服务端
引入依赖
<dependency>
<groupId>org.winterfell</groupId>
<artifactId>slardar-sso-server-starter</artifactId>
<version>1.2.0-SNAPSHOT</version>
</dependency>其他和正常的 slardar 服务一样配置即可,默认的 sso 端点是 /sso/*,也可以通过配置来修改:
slardar:
sso:
ctx-path: /my-sso # 修改为自定义的端点前缀SSO客户端
在sso客户端引入依赖:
<dependency>
<groupId>cn.piesat.v</groupId>
<artifactId>slardar-sso-client-starter</artifactId>
<version>1.2.0-SNAPSHOT</version>
</dependency>修改配置,指定 sso 服务端地址:
slardar:
sso:
server-url: http://localhost:9600/my-sso测试验证
模拟客户端服务的页面访问后跳转到 http://localhost:9600/sso/auth?url=https://xxx.client.com
