单点登录实现的目标:在一个套系统的任意一个系统中登录之后,访问其他子系统能直接登录。
在同一主域名下的所有系统可以共享主域名的cookies,所以再一台服务器中登录之后,将token信息存入到主域名下的cookies中,任意一个子系统访问会自动带上这个token信息,能达到单点登录的效果。
这里主要实现完全跨域的情况下如何实现单点登录:也就是两个系统的域名完全分离,不能共用cookies信息,所以如何在子系统间共享或者传输token信息是最大的问题。
有一个解决方案是:在一个统一登录界面登录之后,将token信息放到重定向的url里面,重定向之后就可以解析url路径参数中的token信息,然后存到自己域名下的token中,但是这个不太优雅,容易造成token的窃取,比如重定向一个url是危险服务器的地址,登录成功之后token信息将会传入到指定服务器中,这就造成token泄露。
这里利用jsonp实现跨域请求鉴权,返回token信息之后存入到自己域名下,之后子系统每次请求都先到统一认证中心进行token检验。使用jsonp也会造成json劫持,这就需要进行Referer验证之类的防范措施了。
具体流程: