基于B/S系统间单点登录
此处说的单点登录的概念,即不同系统公用一个登录界面。一处系统通过登录验证,在接入的各系统均为登录状态。一般有两种情景:
1) 一级域名相同
例如:tieba.baidu.com 和 www.baidu.com
这种情形的解决方案,非常简单。就是在统一登录页面登录成功以后,将用户的token(共享的session)信息存在cookie里,且cookie的作用域设为一级域名,例如设为baidu.com。这样同一个浏览器就实现了用户登录信息的共享。
2) 一级域名不相同
例如 bbs.gamename.com 和 www.public.com
假设这种场景,即public官网旗下的某些款游戏bbs登录都要接入public官网登录中心。
这种场景的问题关键在于用户在public登录中心登录以后,public如何将用户的token信息返回给bbs。因为不同域名无法做到共享cookie,如何解决这个问题呢?
这里提供一种简便的思路。如下图:
第1步跳转:
bbs跳转之前需要先生成一个guid并存入cookie;guid建议用10位随机数。
登录地址如下:
http://www.public.com/user/login/?sourcepage=http://bbs.gamename.com/&guid=1393919365
注册地址如下:
http://www.public.com/user/register/?sourcepage=http://bbs.gamename.com/&guid=1393919365
第2步帐号中心验证登录态。
第3步验证结果:
Public服务器验证请求,并进行登录逻辑。采用RSA私钥加密字串得到loginfo:
第4步跳转:
url传参返回加密字串,格式如下:
第5步登录验证:
调用bbs服务器接口,传入loginfo和本地guid,bbs服务器公钥解密loginfo,验证guid的一致性。若一致则将帐号信息进行登录操作,并返回登录结果。
其中,loginfo字串解密后信息包括:
参数名称 |
描述 |
uid |
游戏中心返回用户平台ID。 |
token |
平台会话token |
nickName |
昵称 |
guid |
第6步
bbs服务器根据登录验证结果,渲染返回给客户端。