Discuz Ucenter与JAVA项目间单点登录的实现方法

经过比较长时间的观察,我发现很多中小型公司都用JAVA作为主要的开发语言,甚至某些公司一个PHP的都没有,而他们的主项目做完之后需要配合一个用户交流的平台,Discuz作为国内比较成熟的论坛平台,成为了首选。符合这些条件的公司大多都需要这么一个功能:单点登录。

什么是单点登录?

单点登录说白了就是关闭论坛的用户注册功能,用户在论坛点击登录的链接时跳转到JAVA项目那边的登陆页面或者直接在论坛提交表单,登陆后论坛也同步登陆。

有哪些解决方案?
1.ucenter-api-for-java

地址:https://sell.moe/p9gq

这是一个比较好的解决方案,但是我自己所在的公司里在实现用户同步登录登出时遇到了难题,也查不出问题出在哪里,于是就采用了下面的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」∠)_

插件下载地址
http://addon.discuz.com/?@cat_connect.plugin

这篇文章有34条评论

  1. seo论坛 2014/7/10 #1 回复TA

    现在技术博客好像没几个人看哦

  2. PHP二次开发 2014/7/10 #2 回复TA

    额,又想起了写接口的日子。。。

  3. kn007 2014/7/11 #3 回复TA

    这个需求很少见。。

    • Kagami po主 回复 kn007 2014/7/11 回复TA

      是挺少的,不过有需要的都是迫切需要这样的功能……

  4. Kunr 2014/7/11 #4 回复TA

    ( ´∀`)

  5. 请大家多多支持博主,就是多多支持有梦网。

  6. 免费部落 2014/7/17 #6 回复TA

    cookies,其实有时候是个很危险的东西!

  7. 博主的模板不错,支持一下

  8. Moon 2014/7/18 #9 回复TA

    cookie跨域就可以很好的解决了嘛 两个站也不用重复登录

  9. 发射 哈哈

  10. 有梦人 2014/7/24 #11 回复TA

    博客你好,有梦网推出,发笑话赚钱,请大家多多支持,欢迎来吐槽。详情见有梦网

  11. Kunr 2014/7/24 #12 回复TA

    你在么也不用多说了← ←(つд⊂)

    • spoonwep po主 回复 Kunr 2014/7/25 回复TA

      | ω・´) 自带的也挺不错的,可惜没有多说的提醒

  12. 还有人研究UC啊,我也DZ与PW都要快死了。

  13. 分享好东西 2014/7/25 #14 回复TA

    擦了。。这背景,快瞎了。。

  14. 黑猫长 2014/7/25 #15 回复TA

    单点登录好厉害的样子!

发表评论

*

List
Love
00:00