一、 SSO
是什么:
SSO英文全称Single Sign On,单点登录。SSO是在多个应用系统或网站中中,用户只需要登录一次就可以访问所有相互信任的应用系统。SSo是跨程序,跨服务器,跨语言的,无论是用Java/.NET或者PHP,最后都是通过一个统一的地方去验证.
SSo应用之间使用Web协议(如http和https),并且只有一个登陆入口.
体系中有三个角色:
User(多个)
Web应用(多个)
SSo认证中心(一个)——实质上是一个服务器网站
工作原则:
所有的登陆都在SSO认证中心进行
SSO认证中心通过一些方法来告诉Web应用当前访问用户究竟是不是通过认证的用户。
SSO认证中心和所有的Web应用建立一种信任关系。
CAS = Central Authentication Service,中央认证服务,是耶鲁大学发起的构建Web SSO的开源项目
cas也就是是单点登录SSO的解决方案.
二、CAS
简单来说,CAS就是能达到很多不同服务器的或者相同服务器的网站,统一到某一个地方登陆,如果你使用同一个浏览器登陆的,那么在这个浏览器再打开其他的网站时,这个网站就不用重新登陆了。
CAS的结构体系:
Cas server需要独立部署,主要负责用户的认证工作。会处理用户名、密码等凭证(Credentials)。就是一个安装在服务器端的一个Web层序。目前有耶鲁大学的,也有其他机构开发的。它是复制认证的服务器
Cas client部署在客户端,,当有对本地Web应用受保护的资源的访问请求,并且需要对请求方进行身份认证的时候来处理响应的请求,如果发现未授权或未登陆,那么就跳转到cas server去认证
认证原理流程:
CAS模式:
CAS1.0称为基础模式,适用场合:参与SSO的应用都为Web应用,且各应用之间相互独立,没有复杂的集成关系。
CAS2.0称为代理模式,适用场合:参与SSO的应用存在非Web应用(CAS使用Cookie,故非Web应用不宜于直接做CAS的客户应用)应用之间,存在集成关系。
工作原理——cas协议内容
CAS协议定义了一组术语,一组接口,一组票据。
(1)术语:1.0(Client、Server、Service)、Proxy、Target。
(2)接口:/login(登陆)、/logout(退出)、
/validate(验证)、/serviceValidate(票据验证)、/proxyValidate(代理验证)、
/proxy(代理)
(3)票据( Client、CAS Server、Service三者,是通过各种票据的传递与验证,来实现单点认证功能的。):
TGT(Ticket Grangting Ticket )。TGT是CAS为用户签发的登录票据,拥有了TGT,用户就可以证明自己在CAS成功登录过。TGT封装了Cookie值以及此Cookie值对应的用户信息。当HTTP请求到来时,CAS以此Cookie值为key查询缓存中有无TGT ,如果有的话,则相信用户已登录过。
ST(Service Ticket )。ST是CAS为用户签发的访问某一service的票据。用户访问service时,service发现用户没有ST,则要求用户去CAS获取ST。用户向CAS发出获取ST的请求,CAS发现用户有TGT,则签发一个ST,返回给用户。用户拿着ST去访问service,service拿ST去CAS验证,验证通过后,允许用户访问资源。包含跳转的地址。
PGT(Proxy TicketGranting Ticket)。Proxy Service认证成功后,CAS会生成PGT,并将值回传给Proxy Service 。Proxy Service拿到PGT后,就可以为Target Service做代理,为其申请PT。
PGTIOU(Proxy TicketGranting Ticket IOU)。PGTIOU是CAS协议中定义的一种附加票据,它增强了传输、获取PGT的安全性。
PT(Proxy Ticket)。PT是用户访问Target Serivce的票据。用户经由Proxy Service去CAS获取到PT后,再访问Target Serivce,Target Serivce去CAS验证PT成功后,才允许用户访问。
三、server、 client和项目三者是如何协调工作的
举例场景介绍:
有一个用户想要在网页上先访问广告合同管理系统ADM,去投放广告;之后又去资产系统AMS,查看资产信息。
而CAS所发挥的作用就是当用户访问ADM时,用户需要先去CAS登录,之后访问AMS时,就不需再次登录了。
下面是Server、client和项目之间的交互: