公司网站要拆分域名,需要实现单点登录这个功能。
于是这边做一个 center
来同步登录状态.
网上查了一下,单点登录更多的是一种思路. 其实实现难度并不大.
这是我找到的流程图, 侵删.
很明显的说明了问题。
- 发起请求 -> 本地存在token -> 向服务器发起请求验证token是否有效 -> 有效 -> 返回资源.
- 发起请求 -> 本地存在token -> 向服务器发起请求验证token是否有效 -> 无效 -> 重新进入3,4的步骤.
- 发起请求 -> 本地不存在token -> 访问服务器验证服务器是否还存在session -> 有 -> 返回token + 资源 -> 本地重新写入token.
- 发起请求 -> 本地不存在token -> 访问服务器验证服务器是否还存在session -> 无 -> center 跳转到登录界面 -> 登录成功 -> 返回token和资源 -> 本地重新写入token.
流程很简单。
接下来我又遇见了几个问题.
- token加密的方式
- 跨域的问题(我用jsonp搞定了)
- 安全性问题。怎么过滤无效请求.
- 最大的问题就是客户端怎么知道token已经失效了.
4
我这种做法客户端和服务端是长连接的. 也就是说服务端没办法通知客户端token失效了.
比如 client1 退出登录,我在服务端取消了token. 但是 client2 并不知道,只能等client2请求才能得到token已经失效,然后要求用户重新登录. 于是这个请求时间就要看需求了。 是否需要马上知道,还是说可以有缓冲的时间.
不过已经快写完了。 这个功能看起来简单,要写好而且保证问题还是要花点时间