一、简介
xjj_sso是基于SSM快速开发框架xjj的一款单点登陆服务实现。可以帮助企业快速搭建单点登陆服务,使用户一次登陆就可以畅游于各互相信任的信息系统。
服务端源码:https://gitee.com/zhanghejie/xjj_sso
客户端源码:https://gitee.com/zhanghejie/xjj_sso_client
QQ 交流群:174266358
二、实现原理
1、名词解释
- GrantingTicket:登陆用户的唯一标识票据。(基于cookie实现,简写:GT)
- ServiceTicket:用户登陆成功后,每访问一个应用信息,都会再为它生成一个st票据。例:如果一个用户登陆了基于sso的三个互相信我任的系统。那么对应该用户总共有1个GrantingTicket,3个ServiceTicket。
2、下面通过时序图的方式来介绍sso的登陆验证流程。
- 登陆窗口在client端的登陆流程如下:
- 已经登陆sso的用户首次访问某信任系统时的验证流程
- 单点退出流程
三、搭建步骤
- 下载xjj_sso项目 https://gitee.com/zhanghejie/xjj_sso
- 使用xjj_sso/doc/db/db_init.sql 创建单点登陆服务端的数据库
- 下载xjj_sso_client项目 https://gitee.com/zhanghejie/xjj_sso_client
- 修改服务端的配置文件 xjj_sso_server.properties,配置介绍如下:
sso.path.authentication=/sso/authentication #单点登陆验证url,一般默认就行
sso.path.signin=/sso/signin #单点登陆url,一般默认就行
sso.path.signout=/sso/signout #单点退出url,一般默认
sso.path.validateTicket=/sso/validateTicket #ticket验证url,一般默认
sso.url.index=/sso/index.jsp #
sso.url.login=http://localhost:8080/xjj_sso #服务端访问url,根据情况修改
sso.cookie.maxage=-1 #cookie相关,一般默认
sso.cookie.name=XJJTC
sso.cookie.path=/
sso.server.error=ssoerror #登陆失败返回参数
#unit minute
sso.grantingticket.invalidate=300 #GT缓存时间(分钟)
#sso project app
sso.login.type=project #登陆方式
#mcmcache config
memcache.is.use=false #是否使用memcache做为缓存
memcache.servers=192.168.54.223\:11211
memcache.ticket.expiry=24
memcache.user.expiry=120
#sso notification type http|rabbitmq #通知方式(http或rabbitmq)
sso.notification.type=http
#rabbitmq config test #rabbit服务相关
rabbitmq.server=192.168.54.204
rabbitmq.port=5672
rabbitmq.username=admin
rabbitmq.password=admin
rabbitmq.exchange=sso_topic
修改client端配置文件xjj_sso_client.properties
sso.client.sessionHandle=com.xjj.sso.client.session.SessionHandleImpl #接口实现,客户端实现,
sso.client.projectCode=zhj #项目编码,登陆服务端后台添加
sso.server.url=http://localhost:8080/xjj_sso #单点登陆服务地址
#sso client
sso.client.receipt=sso.client.receipt
sso.client.ssoLogonUrl=/jsp/ssoLogon #单点登陆验证地址,可以修改,对应登陆页面的提交地址。
sso.client.loginUrl=/sso/login.jsp #该系统的登陆地址
sso.client.login.isredirect=true
sso.client.nofilter=/*/bb/*,/*login* #sso排除拦截地址列表,用逗号隔开。
#sso server url config
sso.server.authentication=/sso/authentication
sso.server.validateTicket=/sso/validateTicket
sso.server.ssoLogoutUrl=/sso/signout
sso.server.signin=/sso/signin
sso.server.error=ssoerror
#sso notification type http|rabbitmq
sso.notification.type=http
#rabbitmq config
rabbitmq.server=192.168.54.204
rabbitmq.port=5672
rabbitmq.username=admin
rabbitmq.password=admin
rabbitmq.exchange=sso_topic
四、运行系统
- 修改Host文件:域名方式访问信任系统,模拟跨域与线上真实环境
- 使用tomcat发布运行系统xjj_sso和xjj_sso_client系统
### 在host文件中添加内容
127.0.0.1 clienta.sso.com
127.0.0.1 clientb.sso.com
3.使用http://clienta.sso.com进行登陆。看登陆能否成功。登陆成功后,再开一个浏览器tab.输入地址 http://clientb.sso.com,查看它的登陆状态,如果还是登陆的,说明搭建成功。在服务端后台菜单【最近在线用户】中可以看到登陆的用户。