一、单点登录
1.什么是单点登录?
单点登录简称SSO,其定义为:在多个应用系统中,用户只需要登录一次,就可以访问所有互相信任的应用系统。
2.为什么要使用单点登录技术?
一些大型网站背后存在成百上千个子系统,用户每一次操作都可能涉及到几十个其他系统的协作,如果每个子系统都要做用户验证,不经用户会疯掉,子系统重复认证用户和授权逻辑也会疯掉。
而单点登录技术能优化用户体验,简化系统开发难度。
2.单点登录的流程是什么?
- 客户端访问应用系统1,如果没有登录,跳转到验证系统。
- 客户端输入登录信息到认证系统,认证系统到数据库中验证用户名密码是否正确,如果正确就把票据返回给客户端。
- 客户端再去访问其他应用系统时会带上票据,为了防止客户端使用伪造的票据,其他应用系统会拿着票据去验证系统做底层的交互验证,确认是否真实有效,如果验证的票据是真的,就不再跳转到认证系统。
票据本质上其实是一个cookie。
二、CAS
1.什么是CAS?
CAS是解决单点登录的一种技术
2.CAS的执行步骤有哪些?
CAS的执行流程和单点登录的流程差不多:
- 访问服务:SSO 客户端发送请求访问应用系统提供的服务资源。
- 定向认证:SSO 客户端会重定向用户请求到 SSO 服务器。
- 用户认证:用户身份认证。
- 发放票据:SSO 服务器会产生一个随机的 Service Ticket。(该步骤容易产生误区,实际上,Ticket是由服务器发放给浏览器端,然后浏览器端带着Ticket去访问客户端。)
- 验证票据:SSO 服务器验证票据 Service Ticket 的合法性,验证通过后,允许客户端访问
服务。 - 传输用户信息:SSO 服务器验证票据通过后,传输用户认证结果信息给客户端。
3.CAS的https认证
CAS默认使用的是HTTPS协议,如果使用该协议需要SSL安全证书,需要向特定的机构申请购买,如果项目安全要求不高,或者只是在开发测试阶段,可以通过修改配置,让CAS使用HTTP协议,从而节省成本。
4.CAS的单点退出登录
在地址栏输入 http://localhost:8080/cas/logout即可完成单点退出登录,如果想在退出登录后自动跳转到某个页面,只需要修改配置文件cas-servlet.xml文件
<bean id="logoutAction" class="org.jasig.cas.web.flow.LogoutAction"
p:servicesManager-ref="servicesManager"
p:followServiceRedirects="${cas.logout.followServiceRedirects:true}"/>
然后在前端页面修改登出跳转的页面地址即可。
<a href="http://localhost:8080/cas/logout?service=http://www.baidu.com">退出登录</a>