基于CAS的单点登录从零到壹最佳实践

1.前言

CAS全称为Central Authentication Service即中央认证服务,是一个企业多语言单点登录的解决方案,并努力去成为一个身份验证和授权需求的综合平台。

CAS是由Yale大学发起的一个企业级的、开源的项目,旨在为Web应用系统提供一种可靠的单点登录解决方法(属于 Web SSO )。

CAS协议至少涉及三方:

客户端Web浏览器

应用资源,请求身份验证的Web应用程序

CAS服务器,如赛赋IDaaS

2.主要特征

多种的协议的支持,包括CAS (v1、v2、v3)、SAML(v1、v2)、OAuth、OpenID、OpenID Connect和WS-Federation Passive Requestor

多种认证机制,可以通过JAAS,LDAP,RDBMS,X.509,Radius,SPNEGO,JWT,Remote,Trusted,BASIC,Apache Shiro,MongoDB,Pac4J等进行身份验证

可以通过WS-FED,Facebook,Twitter,SAML IdP,OpenID,OpenID Connect,CAS等代理委派认证

多种形式的授权包括ABAC, Time/Date, REST, Internet2’s Grouper等

同时也支持HAZELCAST、EHCache、JPA、MycCache、Apache IGITE、MangGDB、ReDIS、DimoDoB、Couchbase等实现高可用多个集群部署

各种丰富的客户端,像常见的Java、Python、Node、PHP、C#、Perl等等

githu项目地址为:https://github.com/apereo/cas

3.设计流程

向第三方提供基于CAS协议的单点登录认证接入的方式,认证成功之后跳转到第三方提供的应用内部。

设计流程如下:
在这里插入图片描述

4.CAS服务端相关接口说明

以下是赛赋IDaaS中的CAS服务接口说明,该接口完全符合CAS协议标准。

4.1 跳转认证接口

接口说明

第三方跳转认证接口,该接口会判断该应用是否登录,如果登录直接重定向到接收ticket(第三方应用获取应用信息的凭)的接口,如果未登录则将用户重定向到登录界面进行登录认证。

接口调用

接口:http://api.safesso.cn:8645/cipher/cas/login?service=http://xxxx.com:xx/xx

(接口地址以最终提供的址为准)

接口方法:GET

请求参数类型:键值对

响应参数:无

请求参数说明

参数必选类型长度说明

service是String-第三方应用接收ticket的地址

返回参数

接口调用示例

请求: http://api.safesso.cn:8645/cipher/cas/login?service=http://xxxx.com:xx/xx

响应:

重定向到登录页或重定向到第三方应用接收ticket地址

4.2 获取第三方账号信息

接口功能

第三方应用根据ticket获取第三方应用账号的权限信息,如果应用已认证返回应用的账号信息,如果未认证 返回第三方应用认证失败信息。

接口调用

接口:http://portal.cipherchina.cn:8645/cipher/cas/login/serviceValidate?ticket=xxxxxxxx

接口方法:GET

请求参数类型:键值对

Content-type:text/html; charset=UTF-8

响应正文:ticket校验失败的响应正文

<cas:serviceResponse xmlns:cas='http://www.yale.edu/tp/cas'>

<cas:authenticationFailure code="INVALID_TICKET">   

ticket  xxx is null" +

</cas:authenticationFailure>  

</cas:serviceResponse>

Ticket校验成功返回应用的权限信息的响应正文

<cas:serviceResponse xmlns:cas='http://www.yale.edu/tp/c

as'>

<cas:authenticationSuccess>

<cas:user>12131212</cas:user>

<cas:attributes>

<cas:uuid>b69ed2d8190b42a58404946ab5107b87</cas:uuid>

<cas:userName>张三</cas:userName>

<cas:jonNo>1212313213213</cas:jonNo>

<cas:email></cas:email>

<cas:phone>13888888888</cas:phone>

<cas:job>总经理办公室</cas:job>

<cas:groups>cipherchina.com/赛赋科技/总经理办公室</cas:groups>

</cas:attributes>

 </cas:authenticationSuccess>

</cas:serviceResponse>

XML返回值属性解释:

user用户子账号

uuid赛赋账号的唯一标识,根据uuid获取应用列表

userName 姓名

jonNo 工号

email 邮箱

phone 手机

job 职位

groups 部门

请求参数说明

参数必选类型长度说明

ticket是String-用来换取应用账号信息的票据

返回参数

调用示例:

请求:

http://api.safesso.cn:8645/cipher/cas/login/serviceValidate?service=http://xxxx.com:xx/xx

响应:

以cas标准格式响应应用的账号信息

4.3 单点登出接口

接口说明

第三方单点登录登出接口,该接口会注销该应用在cas服务端的会话信息并且重定向到浏览器第一次输入地址的页面

接口调用

接口:http://api.safesso.cn:8645/cipher/cas/logout?service=http://xxxx.com:xx/xx

接口方法:GET

请求参数类型:form表单类型

响应参数:无

请求参数说明

参数必选类型长度说明

service是String-用户第一次输入浏览器的地址,如:http://portal.cipherchina.cn:8645/cipher/cas/login?service=http://xxx.xxx.com/user/check

返回参数

302

接口调用示例

请求: http://portal.cipherchina.cn:8645/cipher/cas/logout?service=http://xxxx.com:xx/xx

响应:

重定向到浏览器第一次输入的地址,cas-server将其重定向到认证界面。

5.应用的CAS接口实现方法

若应用不支持CAS协议,则需按参照以下功能开发实现CAS客户端

5.1认证跳转地址

接口功能:

当浏览器输入第三方应用的地址时,第三方应携带第三方应用接收ticket的地址重定向到认证中心。

接口:第三方提供

接口方法:GET

请求参数:

返回参数:

调用示例

接口:www.xxx.com

参数:无

响应:重定向到http://portal.cipherchina.cn:8443/cipher/cas/login?service=http://xxxx.com:xx/xx跳转到认证中心

5.2 认证成功返回ticket接口

接口功能:

认证中心认证成功签发ticket票据返回给第三方应用,第三方应用根据得到的票据获取第三方应用的账号信息。然后根据权限信息进入第三方应用内部。

接口调用:

接口:第三方提供

接口方法:GET

请求参数说明:

参数必选类型长度说明

ticket是String 应用换取应用权限信息的票据

返回参数:无

调用示例:

请求:http://xxx.xxx.xx:/xx/xx?ticket=xxxxxxx

响应:无

6. 相关实现

赛赋IDaaS git项目

https://github.com/CipherChina

产品技术交流
在这里插入图片描述

公众号
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值