在B/S架构的服务总,登录功能通常是通过cookie来实现的,服务器一般会为每一个已登录用户维护一个session,然后讲当前session的session通过网络发送到浏览器,最后存储在cookie中。因为用户的登录信息是记录在session中的,那么要实现用户的共享登录那么就需要共享session,一个解决方案就是将session存储在redis中,让通过应用系统共享同一个resdis,直接读取redis来获取session。但是这样还不够,虽然session实现了共享,当时不通的系统往往拥有不通的域名,而sessionid又通常是保存在cookie中的,因为浏览器同源策略的限制,于是乎就存在一个cookie的跨域传递的问题,一般情况下不同源的网站之间是不能相互传递消息的,而我们讲协议、域名、端口号均相同的两个网站称为同源网站,那么我们现在需要做的就是想办法让cookie的传递突破同源策略的限制,这时候就使用到了cookie中的一项名为path,与domain的选项了,不通的域名可以设置domain为同意父域,此时他们就属于同以父域下了,业绩可以相互传递消息,而path则规定了在网站的哪些路径可以被访问。
认证中心是独立于用户与应用系统的第三方的系统,负责同意管理用户的授权访问,当应用收到来自用户的请求后,通过校验url中是否携带了token信息来判断用户是否已经登录了,若没有携带则将用户重定向到认证中心进行登录认证,这个过程会同时将应用系统的cookie带过去,于是认证中心也就知道了当前用户没有登录,那么就会显示登录页面让用户登录,如果用户已经登录过了,则会跳转到目标url,并响应一个token给应用系统。应用系统在收到该token,会向认证中心验证该token的合法性,去人无误之后,应用系统记录用户的登录状态,将当前token写入cookie下发给用户,用户下次访问的时候将携带该cookie,应用系统通过该cookie中的token进行比对验证用户是否登录过。
该方法就是将认证信息存在本地计算机,服务器响应的认证信息被已特殊的方式存储在不通的域里面,用户每次访问网站的时候都会从本地得存储中读取相应的认证信息携带在请求中进行访问就实现了认证信息的跨域。