关于cas:实践篇基于CAS的单点登录实践之路
作者:京东物流 赵勇萍 前言上个月我负责的零碎SSO降级,对接京东ERP零碎,这也让我想起了之前我做过一个单点登录的我的项目。想来单点登录有很多实现计划,不过最支流的还是基于CAS的计划,所以我也就分享一下我的CAS实际之路。 什么是单点登录单点登录的英文名叫做:Single Sign On(简称SSO)。SSO的定义是在多个利用零碎中,用户只须要登录一次就能够拜访所有相互信任的利用零碎。之前我做的零碎,须要须要设计一套反对单点登录的鉴权认证零碎,所有零碎都基于一套鉴权零碎进行登录,并且能够实现各个系统之间的互信和跳转。所以就采纳了CAS架构。 什么是CASCAS架构的外围是须要搭建一个CAS Server,该服务独立部署,领有独立三级域名,次要负责对用户的认证工作。他次要组成包含WEB前端提供登录页面,票据模块,认证模块。 外围票据: a. TGT(Ticket Grangting Ticket):TGT是CAS为用户签发的登录票据,有TGT就表明用户在CAS上胜利登录过。用户在CAS认证胜利后,会生成一个TGT对象,放入本人的缓存中(Session),同时生成TGC以cookie的模式写入浏览器。当再次拜访CAS时,会先看cookie中是否存在TGC,如果存在则通过TGC获取TGT,如果获取到了TGT则代表用户之前登录过,通过TGT及拜访起源生成针对起源的ST,用户就不必再次登录,以此来实现单点登录。 b. TGC(Ticket-granting cookie):TGC就是TGT的惟一标识,以cookie的模式存在在CAS Server三级域名下,是CAS Server 用来明确用户身份的凭证。 c. 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. 业务背景在我负责的我的项目零碎中,后盾业务采纳的是微服务架构,有对立的业务网关,所以基于对立的业务网关,整合客户其余零碎登录鉴权流程。具体业务架构图如下: 在此阐明一下,因为登录零碎的用户体系在不同的零碎中,所以我在设计SSO对立登录认证的时候,把SSO零碎与业务系统结构进去。而用户体系有两套,一套叫做采方用户体系,一套叫做供方用户体系。所以才会有如图所示的SSO Server服务,他自身不负责用户治理,但会通过对立标准接口的形式实现管制反转,实现对用户服务的调用。 2. 单点登录时序图时序图如下: 如图所示,时序图标识的是两个零碎通过SSO服务,实现了单点登录。 3. 单点登录外围接口阐明3.1 sso认证跳转接口调用阐明: 由利用侧发动调用认证核心的接口。 URL地址: https:// sso.com?appId=***&tenantType=1&redirectUri=***申请形式:302重定向 参数阐明: appId: 对接SSO认证核心的利用惟一标识,由SSO认证核心通过线下的形式颁发给各个利用零碎。 tenantType: 标记是供方登录还是采方登录。采方为1,供方为2. RedirectUri: 利用回调地址。 3.2 重定向获取长期令牌code接口调用阐明: 有认证核心发动,利用侧需实现的接口。认证核心通过302重定向,将code传给利用侧,利用侧自行发动通过长期令牌code换取accessTokenInfo。 URL地址: https://利用域名?code=***申请形式:GET 参数阐明: Code: 长期令牌,无效工夫5min 3.3 获取accessTokenInfo接口调用阐明 由利用侧发动调用认证核心的接口。通过该接口能够获取accessTokenInfo信息,而后零碎自行生成本零碎session信息。 URL地址: https://sso.com/api/token/create?grantType=authorization_code&appId=yuncai&code=***申请形式:GET 参数阐明: appId: 对接SSO认证核心的利用惟一标识,由SSO认证核心通过线下的形式颁发给各个利用零碎。 code: 长期令牌,需加密 ...