多站点通行证设计原理简析

matrixmatrix

在进行多站点统一账号管理时,有以下几个关键点:

  1. 设计公共登录平台—— passport 通行证
  2. 使用 cookie 跨域进行多站点登录
  3. 统一账号管理接口

设计请求流程图:


1.设计公共登录平台—— passport 通行证

设计统一存储各个站点账号数据库:用户表 passport_user

CREATE TABLE `passport_user` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `username` varchar(50) NOT NULL COMMENT '用户名称',
  `email` varchar(255) DEFAULT NULL COMMENT '邮箱',
  `phone` char(11) DEFAULT NULL COMMENT '手机号码',
  `password` varchar(255) NOT NULL COMMENT '密码',
  `bind_client` varchar(255) DEFAULT NULL COMMENT '对应绑定的其他站点相同用户信息id',
  `type` tinyint(2) unsigned NOT NULL DEFAULT '0' COMMENT '来源站点',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
 

多个站点的用户信息统一到一个数据库中,进行统一管理。

2.使用 cookie 跨域进行多站点登录

关键点在于此,登录成功后,跨域生成 cookie ,进行多站点访问。 比如登录 www.a.com 站点时,登录地址去请求 passport 平台(也可以统一登陆页面,来源链接是自己的站点就重定向回去,不是就跳转的默认站点),成功返回 js 脚本:

<script src="http://www.b.com/cookie.php"></script> 
 

http://www.b.com/cookie.php 代码:

//cookie.php
setcookie('test','test',time()+86400,'/','.b.com');
 

去请求其他站点生成跨域 cookie ,也可以在URL后面加上一些加密的参数去请求,提高安全性。

然后访问 www.b.com 时就可以带上 www.a.com 生成的 cookie

3. 统一账号管理接口


每个站点设置 API 统一用户数据到 passport 平台。保证用户数据能一致性。 用户的注册,修改密码等操作同步到 passport 平台,最好设置一些加密参数进行请求。

备注:

  • 各个平台由于密码加密方式不同,请求通行证平台时,最好把各个平台密码加密代码收集到通行证平台。现在都是框架开发, CI Laravel ThinkPHP YII2 等密码加密方式也是可以提取出来的,当然 自己写的更就更方便了。
  • 关于 cookie 存储的有效性,只要有一个站点的 cookie过期那么就要重新生成有效的 cookie ,建议每个站点的 cookie 过期时间统一一下。
  • 通行证平台创建的 user 表可以根据自己需求改动,这里只是做个案例。
  • 原理了解后,其实2个以上的站点这样做更好点,例: usera 站点登陆后 passport平台返回 js 脚本代码生成一个 tokencookie ,当用户访问 b 站点的时候带上 token 在去请求通行证去验证 token ,验证通过后返回 b 站点登录信息。同理 b 访问 c 站点也是。当然访问之前判断是否已经在跳转的站点登陆了进行判断即可。只是有个缺点:第一次新开其他站点的时候,不是在站点跳转时无法同步登陆。之所以这样是不想遍历请求每个站点生成 cookie ,当然还是根据自身需求具体开发。

自己搭建的 hexo 网站,可以去看看,easydo.work 嘿嘿。

「真诚赞赏,手留余香」
还没有人赞赏,快来当第一个赞赏的人吧!
文章被以下专栏收录
还没有评论
推荐阅读