前言

单点登录,就是同平台的诸多应用登陆一次,下一次就免登陆的功能。就像你在首页登录一次,下一次再访问知乎专栏或是知乎日报就可以免去登录操作。

实现SSO的方式有很多,现在主流的就是CAS这种基于session的单点登录形式。

一、单点登录

1.1、背景

我们目前的系统存在诸多子系统,而这些子系统是分别部署在不同的服务器中,那么使用传统方式的 session 是无法解决的,我们需要使用相关的单点登录技术来解决。
image.png

1.2、术语

  • Ticket Granting ticket (TGT) :可以认为是CAS Server根据用户名密码生成的一张票,存在server端
  • Ticket-granting cookie (TGC) :其实就是一个cookie,存放用户身份信息,由server发给client端
  • Service ticket (ST) :由TGT生成的一次性票据,用于验证,只能用一次。相当于server发给client一张票,然后client拿着这是个票再来找server验证,看看是不是server签发的。就像是我给了你一张我的照片,然后你拿照片再来问我,这个照片是不是你。。。没错,就是这么无聊。

1.3、结构

  • CAS Server用来负责用户的认证工作,就像是把第一次登录用户的一个标识存在这里,以便此用户在其他系统登录时验证其需不需要再次登录。
  • CAS Client就是我们自己的应用,需要接入CAS Server端。当用户访问我们的应用时,首先需要重定向到CAS Server端进行验证,要是原来登陆过,就免去登录,重定向到下游系统,否则进行用户名密码登陆操作。

1.4、步骤

  • 1、用户访问应用系统1。过滤器判断用户是否登录,没有登录就重定向(302)到认证CAS系统去进行认证操作。
  • 2、重定向到认证系统,显示登录界面,用户输入用户名密码。认证系统将用户登录的信息记录到CAS服务器的session中
  • 3、认证系统给浏览器发送一个特殊的凭证ticket,再将其返回到应用系统1,应用系统1再次验证是否有效,有效就保存session并且通过
  • 4、用户通过认证,浏览器与网站之间进行正常的访问
  • 5、再次访问应用1系统,由于有session信息,就免验证,直接访问页面
  • 6、用户访问其他项目时候浏览器会拿着这个凭证ticket去CAS验证,通过就同样的在服务器继续保存一份ssion,后面访问就免登录。从而达到一份验证多个系统使用的目的

image.png

1.5、GM和CAS交互通讯

image.png

二、sso_platform界面服务

2.1、功能模块

image.png

  • 天天
  • 手心
  • 指心
  • 系统管理
    • 账号管理
    • 角色管理
    • 菜单管理
    • 后台系统管理

2.2、账号管理

  • 用户的增删改查
  • 重置密码
  • 分配角色
  • 账号同步:同步账号密码,如:之前手心没这个人信息,就新添了一个账号密码

2.3、角色管理

  • 增删改查
  • 分配角色菜单
  • 分配后台系统

2.4、菜单管理

  • 菜单的增删改查

2.5、后台系统管理

  • 应用系统的增删改查
  • 跳转访问路径

2.6、功能集成介绍

  • 单点登录
  • 单点登出
  • 登录账号角色权限在客户端加载
  • 账号信息同步
  • 授权子系统查询(例:game_manager选择跳转的下拉框数据加载)
  • 提供多种授权机制
    • web跳转认证
    • ajax认证
    • 跳过授权认证(例:数据截图服务)

三、SSO_CAS服务

3.1、接口

  • 短信服务(/biz/sms/sendSmsCode)
  • 获取公钥(/tools/RSAPublic)
  • 生成验证码(/tools/getCaptcha)
  • 校验用户是否存在、是否有手机号以及正确(/biz/user/checkUserName)

四、接入单点-客户端

4.1、依赖(此jar存在于公司的nexus私服)

compile('com.haofei:hf-cas-shiro-spring-boot-starter:v0.5-RELEASE')

4.2、添加配置项

# 客户端访问地址   注:需要浏览器能直接访问到的
sso.client-host-url = http://192.168.1.214:8080/game_manager
# 单点登出地址(登出后,跳转的地址)
sso.logout-url = http://192.168.1.213:9090/logout
# 单点平台地址(业务支撑平台)
sso.platform-url = http://192.168.1.213:9090
# 单点cas服务器地址前缀
sso.cas-server-url-prefix = http://192.168.1.213:8090/cas
# 启动单点开关:on/off
sso.switch = on

4.3、实现用户定义接口

com.haofei.boot.sso.casshiro.user.UserDetailService

五、部署

总共分为两个程序,直接丢到服务器用脚本部署启动即可。一个环境只有一个SSO服务

  • /data/web_workspace/app/cas/cas.jar
  • /data/web_workspace/app/platform/platform.jar

六、数据库

账号密码自己去服务器查看

  • dev:213环境
  • qa、stage:bd-qa-gmsso-01服务器