公司有多个系统, 现在想实现统一的登录。
a.xxx.com b.xxx.com 等等。
目前的做法是, login.xxx.com 专门做一个登录验证。 然后把用户信息加密存储在 cookice里。 那么 a.xxx.com 和 b.xxx.com 就可以共享cookice了。
现在我有几个疑问,希望大家能帮我解答一下。
第一个问题: 这样做行不行?
第二个问题:假设我这个cookice时效为一天。 那么如果在一天内, 要是管理员把某个员工禁用了, 但是这个时候客户端有了这个cookice 那么还是可以继续操作的,怎么办?
第三个问题:现在大多数站点,比如京东,博客园,等 是怎么做的?
这样也可以,不过不安全。
建议使用session,比cookie更安全,然后再加上身份验证,这样就更强壮了。
用session,他的需求满足不了,多台服务器如何共享session,难道还要单独建立一个Session服务器,一挂全部挂。
@Supper_litt: Session多服务器共享是可以的,这个你可以搜索的到的
@XY.Seay: 代价太高,稳定性不高,依赖性太大。
修改cookie中sessionid的域为xxx.com, 会话就会在所有二级域名下共享.如果你们的服务器不在一起就用独立的session服务器.
这是达到你目的最简单的办法.
我针对你的第二个问题,回答一下,你cookie里面肯定只有员工的唯一定位信息噻,你真正操作使用的时候,可能要从cache里面拿到员工的完整信息,那个里面判断员工状态就可用了,或者再cache里面直接就拿不到员工,return null
创建一个 用户登录的表 存session 每天晚上定时清理,如果禁用的话 从表里面 删除。各个站点 登录的时候 统一验证
token认证,在各自保留跨站点的登陆信息,区分本站登陆和单点登陆。
如果是asp.net程序,可以直接采用微软的Form登录机制,authentication 里设置domain=".xxx.com",就可以实现登录共享了
单点分为几个步骤:
1.系统没有登录 跳转到登录站点
2.登录后跳转回 系统 同时带回身份识别的键(这个键应该带有时效性)
3.通过这个键 获取用户信息
4.在cookie中共享这个键
这里你的误区是 cookie里面共享的东西 cookie里面共享的不是用户信息 而是键值 那么就没有安全问题(如果跨域是没法共享cookie的),这里的关键在于共享键值 至于是用什么手段 都无所谓
其二 有关时效性的问题 能够设置失效的 不见得非要是cookie 也可以是键值在返回的时候就自带 有效时间
oauth 2.0
放在session中,禁用以后修改session就行