经过比较长时间的观察,我发现很多中小型公司都用JAVA作为主要的开发语言,甚至某些公司一个PHP的都没有,而他们的主项目做完之后需要配合一个用户交流的平台,Discuz作为国内比较成熟的论坛平台,成为了首选。符合这些条件的公司大多都需要这么一个功能:单点登录。
什么是单点登录?
单点登录说白了就是关闭论坛的用户注册功能,用户在论坛点击登录的链接时跳转到JAVA项目那边的登陆页面或者直接在论坛提交表单,登陆后论坛也同步登陆。
有哪些解决方案?
1.ucenter-api-for-java
这是一个比较好的解决方案,但是我自己所在的公司里在实现用户同步登录登出时遇到了难题,也查不出问题出在哪里,于是就采用了下面的cookies的方法
2.cookies
我在帮一家企业做用户同步登录登出时建议采用此种方法,他们的技术竟然说要是用户禁用了cookies怎么办……我就吐槽他说这年头哪个用户会没事儿自己去禁用cookies,再说,Discuz的登陆验证是基于cookies的,你要是禁用了cookies,那就无法登录了
这里来说一下这个cookies验证的流程是怎么样的吧
首先,我们两个项目之间(下面称论坛为A,另一个项目为B)约定一个安全cookie(设置了httponly),这个cookie的值是用户的UID的MD5值拼接salt,最后再对整个字符串MD5加密,这样就会比较安全,至于这个salt你可以使用固定的某个字符串,个人建议是从Ucenter的表“cdb_ucenter_member”中取出字段salt的值,每个用户的salt都是随机生成的唯一的6位字符串,这样就算攻击者利用了比如老版本Apache的httponly cookies泄露的漏洞获取了用户的cookies,通过彩虹表撞库等破解的可能性几乎就没了。
接着,这个约定的cookie在用户处在论坛登录状态时会自动设置好,用户登出论坛时自动清零。我们可以在论坛首页某处写一个表单,表单提交的地址为B登陆提交地址,当B接收到用户名密码时,B项目的用户登录,同时发送一个HTTP POST请求到A的某个接收页面,A通过使用Discuz的userlogin方法验证登录,当用户在B处登出时,B对用户的cookie(就是上面约定好的那个cookie)清零,A处监测到约定的cookie为0,则进行用户退出操作(可以直接把auth置0)
不知道我有没有讲清楚,语言组织可能很有问题(=゚ω゚)= 我做了个Discuz插件方便这些有需要的用户进行单点登录功能的实现,不过是收费的 _(:3」∠)_
现在技术博客好像没几个人看哦
刚写完 |∀` )
可能有这个需求的人也少吧~
额,又想起了写接口的日子。。。
哎,程序员总有一段苦逼的日子啊|ー` )
这个需求很少见。。
是挺少的,不过有需要的都是迫切需要这样的功能……
( ´∀`)
请大家多多支持博主,就是多多支持有梦网。
cookies,其实有时候是个很危险的东西!
有httponly安全点……
博主的模板不错,支持一下
*´∀`)´∀`) 是别人模板改造一下而已
好看
感谢~
是没有见过的生面孔~
cookie跨域就可以很好的解决了嘛 两个站也不用重复登录
其实我这方法就是跨域0.0
博客你好,有梦网推出,发笑话赚钱,请大家多多支持,欢迎来吐槽。详情见有梦网
你在么也不用多说了← ←(つд⊂)
| ω・´) 自带的也挺不错的,可惜没有多说的提醒
你的颜文字差评!
待会改一下位置
而且还不能随光标插入。
连博客都错位了ヽ(;^;)ノ
还有人研究UC啊,我也DZ与PW都要快死了。
其实DZ市场还是挺大的……
擦了。。这背景,快瞎了。。
不知道为什么错位了QAQ
单点登录好厉害的样子!
其实就是cookie跨域ww