因个人能力有限,本文档难免疏漏错误,勘误请联系 邮件 。
身份认证,就是判断一个用户是否合法的过程。所谓统一身份认证,就是指在信息化的工作体系中,为各应用系统提供用户统一身份认证和管理的系统。我校统一身份认证采用中央认证服务(Central Authentication Service,下文简称CAS),CAS的官方网站为 https://www.apereo.org/projects/cas 。
CAS是一套完整的统一身份认证解决方案。CAS包括对应的网络协议(CAS Protocol)、协议的实现(CAS Server)和与CAS服务交互的软件包(CAS Client) 。
考虑到学校的实际情况,以及二次开发的需求,我校 统一身份认证系统 遵循了 CAS Protocol 的相关规范,自主实现了CAS Server的逻辑。我们并未重新实现CAS Client,推荐使用官方的CAS Client接入服务。
更新日志 返回顶部
# Changelog All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## [2019-06-21] Finish this doc first time.
CAS简介及基本业务流程 返回顶部
CAS涉及至少三方:使用Web应用程序的用户浏览器端(User),接入CAS的Web应用程序(Web Server)和CAS服务器端(CAS Server)。下文简单描述CAS协议实现的过程。
从用户角度(User)来看,当客户端访问需要身份验证的Web应用程序时,Web应用程序会将其重定向到CAS服务器端(CAS Server)。 CAS通常通过检查数据库(例如Kerberos,LDAP或Active Directory)的用户名和密码来验证客户端的真实性,参考下图:
从Web应用程序(Web Server)的角度来看,当User浏览器端拿到票据后,Web应用程序(Web Server)将携带票据去CAS Server校验并获取用户信息:
需要注意的是,此时在Step4 用户端登录成功后,CAS Server会在在用户浏览器端(User)放置Cookie:TGC(Ticket Granting Cookie),该Cookie是用以单点登陆(Single-sign On,简称SSO) Session的键值(Session Key)。
从CAS服务器(CAS Server)的角度来看,除了响应User的登录请求外,还需要响应票据校验:
在完成上述基本流程的同时,使用Web应用程序的用户浏览器端(User),当他需要访问另外一个接入CAS的Web应用程序(Web Server)时,再次涉及到和CAS服务器端(CAS Server)进行身份认证时,将直接使用SSO Session来完成。也就是说,用户只有在与CAS服务器未建立SSO Session时需要提交有效的身份凭证(如username & password)用以建立SSO Session,在建立SSO Session之后,用户不再需要重复提交身份凭证。一般情况下,SSO Session除了会在设定的有效期结束后失效,也会随着浏览器关闭而失效
完整得时序图参考下图:
CAS协议 返回顶部
点击下载CAS协议官方文档(V5.2.x)的中文翻译版: CAS Protocol 3.0 Specification.docx 。
如需英文文档(V5.2.x),请访问官网 CAS-Protocol-Specification.html 。
文档详细介绍了每一项协议以及该协议的参数规范,以下介绍我校实现统一身份认证的协议以及相应描述。
version | protocol | method | parameters | REQUIRED | description | response[*:any][-:none] | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
CAS 1.0 | /login | GET | service | OPTIONAL | 当用户到CAS服务器请求身份认证时,CAS服务器首先会根据浏览器Cookie中TGC的有效性来判断用户登陆状态,并做出响应。其中service参数用来告知CAS服务器用户当前请求登录的服务内容,renew参数则控制是否强制用户重新授权,gateway参数则要求CAS服务器不向用户索要授权。renew和gateway是互斥的,如果同时传递则CAS服务器会认为两个参数都没有传递。推荐在传递renew或gateway参数时value设置为"true"。 |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||
renew | OPTIONAL | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
gateway | OPTIONAL | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
/login | - | service | OPTIONAL | 在/login[METHOD=GET],且响应结果包含"要求用户重新登录"的情况时,/login会展示一个账号密码登陆页面(我校目前支持两种授权方式:账号密码和微信企业号Oauth认证,此处介绍账号密码方式,微信认证见下文)。 用户需要输入username和password密码,可能需要输入lt验证码进行登录校验,CAS服务器会根据校验结果做出响应。 |
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
renew | OPTIONAL | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
gateway | OPTIONAL | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
POST | username | REQUIRED | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
password | REQUIRED | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
lt | OPTIONAL | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
/logout | GET | service | OPTIONAL | 当用户请求登出时使用,用户可以选择传递url或者service参数,CAS服务器根据TGC的有效性以及url/service参数做出响应。注意url和service只是兼容不同版本的CAS而定,只需传任一即可。如果同时传递,CAS服务器将只响应url参数 |
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
url | OPTIONAL | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
/validate | GET | service | REQUIRED | 【不推荐使用】 用户登录成功后,CAS服务器会将授权票ST递交给浏览器,并由浏览器将ST交给service所在服务器,由service所在服务器请求验证票据。CAS服务器根据ST的合法性和相应参数做出响应。必须传递service和ticket参数,renew参数要求ST必须时用户的主凭发出的时认证才会成功。 |
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ticket | REQUIRED | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
renew | OPTIONAL | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
CAS 2.0 | /serviceValidate | GET | service | REQUIRED | serviceValidate作用与validate类似,用以验证ST的合法性,同时支持代理票据的相关业务。service和ticket参数必须传递,pgtUrl(一般为被代理的应用服务器)用以传递代理回调地址,renew参数要求ST必须时用户的主凭发出的时认证才会成功,而method参数定义了返回数据的格式。CAS服务器根据相应参数做出响应。 这里响应说明略过format和renew参数。 serviceValidate校验代理票据PT会提示错误。 |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||
ticket | REQUIRED | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
pgtUrl | OPTIONAL | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
renew | OPTIONAL | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
format | OPTIONAL | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
/proxyValidate | GET | service | REQUIRED | proxyValidate作用与serviceValidate作用与validate类似类似,用以验证ST的合法性,同时支持验证代理票据PT。service和ticket参数必须传递,pgtUrl(一般为被代理的应用服务器)用以传递代理回调地址,renew参数要求ST必须时用户的主凭发出的时认证才会成功,而method参数定义了返回数据的格式。CAS服务器根据相应参数做出响应。 这里响应说明略过format和renew参数。 |
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ticket | REQUIRED | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
pgtUrl | OPTIONAL | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
renew | OPTIONAL | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
format | OPTIONAL | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
/proxy | GET | pgt | OPTIONAL | 当service服务在浏览器发出/serviceValidate或/proxyValidate请求携带pgtUrl时,CAS服务器会向回调地址pgtUrl(一般为被代理的应用服务器)发送PGT和pgtIou,成功后会将pgtIou发送给浏览器,通过浏览器,被代理应用的服务器获得了pgtIou,检索回调地址接收的数据可以获得PGT,应用服务器将使用PGT通过/proxy协议校验PGT的有效性并请求用户数据。CAS服务器会根据传递的targetService和PGT响应请求。 被代理的应用服务器会根据用户信息,将与代理服务器约定好的用户数据返回给浏览器。 |
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
targetService | OPTIONAL |
CAS Client下载 返回顶部
CAS官方提供了常见的Web应用程序用到的CAS Client,使用这些Clients,可以降低接入难度,提升接入效率。完整的CAS Clients可以 查看官网 。
我们建议在接入时选择最新的稳定版本CAS Client版本,以降低系统的安全风险。
更多非官方的CAS Client可以查看这里,但是他们可能已经过期或是不再维护了。
接入指南 返回顶部
下文将以php和Java为例,通过详细的配置来描述我校的统一身份认证登录接入过程。
TBC
在企业号内通过CAS获取用户信息 返回顶部
有关中国科学技术大学信息服务微信企业号(以下简称企业号)的介绍,可以 查看这里 。从用户角度来说,用户在关注微信企业号之后需要完成一次身份认证的过程(使用校内邮箱绑定将个人微信信息与校园身份绑定),完成认证之后,用户可以在企业号内查询个人在校内业务系统的数据。从应用/服务角度来说,可以通过企业号获取用户身份信息为用户提供服务。目前已经接入微信企业号的应用和服务包括财务系统、校园百科、个人信息、图书馆、公共信息和服务大厅等。
我校CAS系统与企业号用户身份信息是相通的。对于应用和服务来说,如果业务系统对接了CAS系统,并且业务本身对移动设备做了适配,可以直接通过CAS系统将业务部署在微信企业服务,为校内师生提供更加集中和便捷的服务。我们通过微信Oauth认证于CAS协同工作获取用户身份,以下通过时序图和一个Demo来演示这个过程。
值得注意的是,对于接入的应用和服务,仅需要构造Oauth URL即可在微信内获取用户身份信息。
Oauth | parameters | description |
---|---|---|
https://open.weixin.qq.com/connect/oauth2/authorize | appid | 接入时联系管理员索取 |
redirect_url | CAS链接,https://passport.ustc.edu.cn/login,需要urlencode | |
response_type | 配置为'code' | |
scope | 配置为'SCOPE' | |
agentid | 接入时联系管理员索取 | |
state | 配置为'fromWeiXin-' + 服务/应用URL | |
其他 | 在所有参数后完成后url添加#wechat_redirect |
TBC
完