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. 悲剧猴子 2014/7/28 #1 回复TA

    楼主,你的应用审核通过了,,我有点兴趣购买来着,你可以先把链接和密码给屏蔽了,尊重下你的劳动成果~

    • spoonwep po主 回复 悲剧猴子 2014/7/28 回复TA

      好的,谢谢,有需要联系Email:i@kagami.me

发表评论

*

List
Love
リフレクティア
00:00