免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 6020 | 回复: 12

PERL 和PHP 分别采用不同域名的sever 单点登陆SSO 简易实现思路 [复制链接]

论坛徽章:
0
发表于 2012-05-31 15:52 |显示全部楼层
本帖最后由 kevin_w_sh 于 2012-05-31 21:12 编辑

单点登陆SSO 有一些成熟的解决方案,但对于我的项目,仅有两个sever的系统,感觉投入应用还是比较复杂,代码改动量较多

于是,我自己拟定了如下网页重定向来保存session的方案并已实施成功,请各位多多指教,有没有不安全的因素,或者更好的方法来实现

网址1: a.com,全部perl 代码,A 服务器,存储注册用户资料
网址2: b.com,全部php 代码,B 服务器

用户可以在a.com 登录,也可以再b.com 登录

登录流程如下:

1 登陆a.com , Perl按照正常的登陆验证成功之后,生成一个网页重定向URL 到b.com,这个url,包含user=kevin&timestamp=590404668a4fa55dbbfe533dc9e28cd5

期中timestamp已MD5 加密,同时把未加密的时间戳写到mysql数据库中

2 用户的浏览器跳转到b.com 之后,通过API 访问A 服务器的mysql,根据传来的用户名和时间戳,验证用户的合法性,如果时间戳和用户名都符合,显示在b.com 登陆成功,保存session

3 网页重定向,返回 a.com登陆之后的状态


如果用户先登陆b.com ,则相反的流程,但时间戳都是写在A 数据库


公司CTO 认为还不够安全,让我再找好的解决方案,我现在迷惑中


求指点








论坛徽章:
0
发表于 2012-05-31 16:04 |显示全部楼层
a.com与b.com如何能共享cookie? 协议上就不允许吧。
gmail.com之所以改成mail.google.com,就是共用google.com这个域的cookie。
考虑下第三方认证服务,例如OAuth.

论坛徽章:
0
发表于 2012-05-31 21:06 |显示全部楼层
谢版主

1 cookie 并没有共享

而是在网页重定向的时候,传过去一个ticket(user=kevin&timestamp=590404668a4fa55dbbfe533dc9e28cd5)

浏览器转到b.com 之后,发现有这个ticket,会自动校验这个ticket的合法性(通过api 访问mysql 看这个唯一的时间戳是否存在)

如果合法,立即写入b.com的 session,cookie 当然也就生效了

2 通过网页重定向二次(俗称网页跳转),连个域名下面分别都单独生成了成功登陆的cookie 标记和session

论坛徽章:
0
发表于 2012-05-31 21:44 |显示全部楼层
考虑统一认证机制比较好。避免a.com搞一套用户系统,b.com搞一套用户系统。
user@domain.com这样来区别唯一用户。
例如user@a.com是唯一用户,user@b.com也是唯一用户,由用户中心来统一认证和授权。
网易的多个域就是这么做的。

论坛徽章:
0
发表于 2012-05-31 23:42 |显示全部楼层
兰花仙子 发表于 2012-05-31 21:44
考虑统一认证机制比较好。避免a.com搞一套用户系统,b.com搞一套用户系统。
用这样来区别唯一用户。
例如 ...


en
现在数据库是统一的,都在A sever 上

B sever 没有用户资料库

用户名由于历史原因,不是emal 方式,这就很难去改了

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
发表于 2012-06-01 07:53 |显示全部楼层
楼主还是应该用成熟的方案。
你所做的最多是个workaround的办法,这就是为什么你公司CTO认为不安全。
我第一个想到的也是OAuth,但OAuth主要还是授权,如果你的目的是授权,那用OAuth是很合适的。但如果你这是想单点登录,用LDAP就好了。
这些办法是成熟的标准化的,而且有更好的扩展性。

论坛徽章:
0
发表于 2012-06-01 09:25 |显示全部楼层
kevin_w_sh 发表于 2012-05-31 23:42
en
现在数据库是统一的,都在A sever 上


如果非得说安全,你这个方案是有安全问题,而且问题很大。
比如有张三、李四两个人坐一起,张三看到旁边的李四登陆了a.com,然后他赶紧构造一个请求,用李四的ID去登陆b.com,按照你的逻辑,也是可以成功的。

论坛徽章:
0
发表于 2012-06-01 12:18 |显示全部楼层
本帖最后由 kevin_w_sh 于 2012-06-01 12:21 编辑
兰花仙子 发表于 2012-06-01 09:25
如果非得说安全,你这个方案是有安全问题,而且问题很大。
比如有张三、李四两个人坐一起,张三看到旁 ...


这个理论上有,但概率非常的低,可以忽略不计,可能CTO 考虑的是其它原因?



1 生成的时间戳ticket经过MD5加密了,字符串32位太长,坐在身边的人无法肉眼来去构造,而且网页跳转很快,即使想复制也麻烦




2 坐在身边的一般是同事或朋友,除非电脑被黑,电脑操作权给了别人,那什么加密方式都一样的

论坛徽章:
0
发表于 2012-12-05 12:09 |显示全部楼层
我锁定一个用户名,不停以某用户的身份递交一个包含当前timestamp的MD5加密的请求,那么只要这期间这个用户跳转一次,我就可以顺利的伪造成功了。。这可不是一点点的不安全

论坛徽章:
1
操作系统版块每日发帖之星
日期:2016-06-12 06:20:00
发表于 2012-12-06 10:09 |显示全部楼层
点击登陆后象某个中心(ldap或者memcache)检验一下用户名和密码的正确性,如果正确就写个cookie输出P3P的头 比如 P3P: CP=" OTI DSP COR IVA OUR IND COM "
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP