CAS统一认证平台
原理

用户首次登录时流程
1)、用户浏览器访问系统A需登录受限资源,此时进行登录检查,发现未登录,然后进行获取票据操作,发现没有票据。
2)、系统A发现该请求需要登录,将请求重定向到认证中心,获取全局票据操作,没有,进行登录。
3)、认证中心呈现登录页面,用户登录,登录成功后,认证中心重定向请求到系统A,并附上认证通过令牌,此时认证中心同时生成了全局票据。
4)、此时再次进行登录检查,发现未登录,然后再次获取票据操作,此时可以获得票据(令牌),系统A与认证中心通信,验证令牌有效,证明用户已登录。
5)、系统A将受限资源返给用户。
请求跨域原因

从上图可以看出,在统一登陆预检请求的返回头中并没有Access-Control-Allow-Origin请求头,这也是跨域的问题所在。
表示该请求不允许跨域请求。浏览器控制台并会打印下图错误:

究其原因:CAS服务端并未开启允许跨越请求。
CAS服务端为啥不开启允许跨域请求:安全上不允许(百度结果,具体可以看看CAS认证原理)。
怎样才被视为跨域
这里涉及同源策略,非同源请求皆是跨域
同源策略的基本概念
1995年,同源政策由 Netscape 公司引入浏览器。目前,所有浏览器都实行这个政策。同源策略:最初,它的含义是指,A网页设置的 Cookie,B网页不能打开,除非这两个网页"同源"。所谓"同源"指的是"三个相同"。
协议相同
域名相同
端口相同
同源策略的目的
同源政策的目的,是为了保证用户信息的安全,防止恶意的网站窃取数据。
预检请求(preflight request)
请求方式:OPTIONS
Preflighted Requests是CORS中一种透明服务器验证机制。预检请求首先需要向另外一个域名的资源发送一个 HTTP OPTIONS 请求头,其目的就是为了判断实际发送的请求是否是安全的。

简言之,options请求是用于请求服务器对于某些接口等资源的支持情况的,包括各种请求方法、头部的支持情况,仅作查询使用。
普通请求(HttpRequest)和Ajax请求(XMLHttpRequest)
最直接的区别:Ajax请求头会多一个x-requested-with参数,值为XMLHttpRequest
HttpRequest:请求时不会发送OPTIONS预检请求。
例如:a标签的href,浏览器地址栏直接输入等方式。
XMLHttpRequest: 请求时会发送OPTIONS预检请求。
例如:通过Ajax发送请求。
解决前后端分离情况下的cas统一认证跨域问题
跨域问题主要是跟CAS服务端的交互:登陆和登出
解决思路: 将XMLHttpRequest转换成HttpRequest请求,不做预检。
登陆
cas client不直接跳转,改做返回需要跳转的cas统一平台认证URL
前端拿到URL后,在数据统一处理里面做拦截处理。然后window.location.href指向URL

登出
由ajax发送到cas client的注销请求改为a标签的请求即可自动跳转至cas服务端注销,且不会发送OPTIONS预检请求。

CAS统一认证平台的原理和用户登录流程被详细阐述,包括票据的获取和验证。文章指出,由于缺少Access-Control-Allow-Origin头,导致跨域问题。同源策略和预检请求(OPTIONS)在此过程中起关键作用。为解决跨域问题,提出了将Ajax请求转换为常规HTTP请求的方法,以避免预检请求。对于登陆和登出场景,给出了相应的解决方案。
1293

被折叠的 条评论
为什么被折叠?



