php技术-基于oauth2.0协议实现多个网站同步登陆登出(非Ucenter)

时间:2024-03-30 22:26:50

之前做的一个多个域名网站同步登陆, 以前用ucenter做过,不过感觉很麻烦, 毕竟ucenter文件太多了,而且客户端如果登陆用ajax方法还不好实现, 因为返回过来的javascript字符串没法加载,只能跳到另一个页面去输出一下javascript才能获得session.

这个纯自己做的同步登陆, 思路简单, 方法简单, 方便使用和借鉴.

言归正传~~

思路: 比如A站, B站, 两个站, 要同步登陆, 又可以独立管理自己, 用户系统肯定是要分开的, 但是要达到同步, 我需要A站的用户,B站也有, B站有的用户, A站也有. 所以同步注册,以及同步登陆.

1. 在A站登陆时, 在A站验证成功以后, 需要告诉B站, 所以要调用B站的接口,

php技术-基于oauth2.0协议实现多个网站同步登陆登出(非Ucenter)

php技术-基于oauth2.0协议实现多个网站同步登陆登出(非Ucenter)

2. UCenterController是我写的一个第三方登陆控制器.封装了 登陆,注册,修改,删除.退出等操作. 下图是个登陆接口

php技术-基于oauth2.0协议实现多个网站同步登陆登出(非Ucenter)

3. 首先appid\appsecret,是A站和B站的私钥, 作用是根据oauth2.0协议生成**, 防止其它人冒充访问. 

生成签名php技术-基于oauth2.0协议实现多个网站同步登陆登出(非Ucenter)

生成随机数

php技术-基于oauth2.0协议实现多个网站同步登陆登出(非Ucenter)

我这里为了偷懒, 所以写成了一个公用的跳转方法. 

php技术-基于oauth2.0协议实现多个网站同步登陆登出(非Ucenter)

4. url参数有, method 接口方法, signature 签名, timestamp 时间戳, nonce随机数. 也可以带url, 返回路径

5. B站验证签名合法性, 以及请求的方法合法性

php技术-基于oauth2.0协议实现多个网站同步登陆登出(非Ucenter)

签名方法

php技术-基于oauth2.0协议实现多个网站同步登陆登出(非Ucenter)


6. B站登陆接口方法.

php技术-基于oauth2.0协议实现多个网站同步登陆登出(非Ucenter)

如果是ajax方式, 接口是直接抓取的, 如果你的A站登陆是 URL跳转, 就可以带上回调地址,让它跳转回来.

7. 接口同步完成后, 就可以ajax告知前端.

php技术-基于oauth2.0协议实现多个网站同步登陆登出(非Ucenter)

php技术-基于oauth2.0协议实现多个网站同步登陆登出(非Ucenter)

前端收到url信息后, 就进行跳转, 这样,同步登陆就完成了. 不跳转的话,回获取不到登陆