[实践篇]基于CAS的单点登录实践之路

科技资讯 投稿 6600 0 评论

[实践篇]基于CAS的单点登录实践之路

作者:京东物流 赵勇萍

前言

什么是单点登录

单点登录的英文名叫做:Single Sign On(简称SSO)。SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。之前我做的系统,需要需要设计一套支持单点登录的鉴权认证系统,所有系统都基于一套鉴权系统进行登录,并且可以实现各个系统之间的互信和跳转。所以就采用了CAS架构。

什么是CAS

核心票据:

TGT(Ticket Grangting Ticket:TGT是CAS为用户签发的登录票据,有TGT就表明用户在CAS上成功登录过。用户在CAS认证成功后,会生成一个TGT对象,放入自己的缓存中(Session,同时生成TGC以cookie的形式写入浏览器。当再次访问CAS时,会先看cookie中是否存在TGC,如果存在则通过TGC获取TGT,如果获取到了TGT则代表用户之前登录过,通过TGT及访问来源生成针对来源的ST,用户就不用再次登录,以此来实现单点登录。

TGC(Ticket-granting cookie:TGC就是TGT的唯一标识,以cookie的形式存在在CAS Server三级域名下,是CAS Server 用来明确用户身份的凭证。

ST(Service Ticket:ST是CAS为用户签发的访问某一客户端的服务票据。用户访问service时,service发现用户没有ST,就会重定向到 CAS Server 去获取ST。CAS Server 接收到请求后,会先看cookie中是否存在TGC,如果存在则通过TGC获取TGT,如果获取到了TGT则代表用户之前登录过,通过TGT及访问来源生成针对来源的ST。用户凭借ST去访问service,service拿ST 去CAS Server 上进行验证,验证通过service生成用户session,并返回资源。

基于CAS的系统实践方案

1. 业务背景

2. 单点登录时序图

时序图如下:

3. 单点登录核心接口说明

3.1 sso认证跳转接口

调用说明:

URL地址:

https:// sso.com?appId=***&tenantType=1&redirectUri=***

请求方式:302重定向

appId: 对接SSO认证中心的应用唯一标识,由SSO认证中心通过线下的方式颁发给各个应用系统。

RedirectUri: 应用回调地址。

3.2 重定向获取临时令牌code接口

有认证中心发起,应用侧需实现的接口。认证中心通过302重定向,将code传给应用侧,应用侧自行发起通过临时令牌code换取accessTokenInfo。

https://应用域名?code=***

请求方式:GET

Code: 临时令牌,有效时间5min

3.3 获取accessTokenInfo接口

由应用侧发起调用认证中心的接口。通过该接口可以获取accessTokenInfo信息,然后系统自行生成本系统session信息。

https://sso.com/api/token/create?grantType=authorization_code&appId=yuncai&code=***

请求方式:GET

appId: 对接SSO认证中心的应用唯一标识,由SSO认证中心通过线下的方式颁发给各个应用系统。

code: 临时令牌,需加密

加密规则如下:

    Code先进行base64加密

  1. 用认证中心给的privateKey进行加密(RSA加密)。

  2. 加密后进行URLCode转码。

{
  “accessToken”:  “****”,  //token令牌
  “expiresIn”: 7200,        //过期时间
  “user”: {
    “username”: “zhangsan”,
       “fullName”: “张三”,
      “userId”: “1212”,
      “phone”: “13100000000”,
      “email”: zhangsan@test.com,
      “tenantId”: “S2131123”,
      “tenantType”: 1
  }
}


3.4 刷新Token接口

调用说明:

URL地址:

https://sso.com/api/token/refresh?appId=yuncai&accessToken=***

请求方式:GET

appId: 对接SSO认证中心的应用唯一标识,由SSO认证中心通过线下的方式颁发给各个应用系统。

4. 单点登出逻辑

有单点登录,也会有单点登出,这样才会形成业务闭环,对于单点登出逻辑,基本类似登录的逆操作,时序图如下:

5. 单点登出核心接口说明

5.1 登出sso认证中心跳转接口

由应用侧发起调用认证中心的接口。

https://sso.com/logout?redirectUri=***

请求方式:GET

RedirectUri: 应用回调地址。

5.2 应用系统退出接口

有认证中心发起,应用侧需实现的接口。通过该接口触发个应用系统清除缓存和session相关信息,实现系统登出。

https://应用系统域名/ssoLogout

请求方式:GET

 header: logoutRequest:=accessToken

总结

对于CAS这种单点登录的架构,他是非常依赖于cookie的安全性的。所以CAS的安全性也在一定程度上取决于cookie的安全性,所有增强cookie安全性的措施,对于增强CAS都是有效的。

最后提一句,一定要使用HTTPS协议哦。

编程笔记 » [实践篇]基于CAS的单点登录实践之路

赞同 (34) or 分享 (0)
游客 发表我的评论   换个身份
取消评论

表情
(0)个小伙伴在吐槽