在站点之间传递凭据

时间:2008-12-09 05:19:19

标签: security joomla passwords single-sign-on moodle

我在具有两个不同域的两个不同服务器上运行两个不同的站点。一个站点运行Joomla,另一个运行Moodle。我已经将Moodle服务器配置为基于Joomla站点上的users表进行身份验证,因此我们拥有权威的用户信息来源。

我想做的是:在有人登录Joomla网站后,提供一个指向Moodle网站的链接,该网站将默默登录,这是一种伪造单点登录解决方案。 Joomla中的密码是MD5,每个密码都有自己的秘密盐。

如何解决这个问题的第一个想法是告诉Moodle密码以纯文本形式存储,然后通过隐藏的表单输入,在点击链接时发送加密密码。除了显而易见的安全问题之外,它还意味着如果他们尝试通过Moodle界面登录,他们需要输入一个巨大的MD5字符串,因为这是Moodle认为他们的密码。

我一直在考虑更改Moodle中的身份验证模块,以便如果提交的密码符合某些条件(例如:它是32个十六进制字符),那么在与Joomla版本进行比较之前不要MD5它 - 问题是任何人都可以(在发现加密密码后)然后使用它来登录。我需要的是一些特殊方式将加密密码从Joomla发送到Moodle并发信号通知Moodle以不同方式处理该登录请求。

有什么想法吗?

3 个答案:

答案 0 :(得分:4)

您可以针对安全的单点登录解决方案执行以下操作:

  • 为Joomla用户生成随机(带PRNG)令牌(存储此)
  • 在内部发送此令牌(通过网络服务等,通过HTTPS或本地数据源保存)到Moodle
  • 在发送此令牌时,您应该告知Moodle有关哪个令牌所属的用户ID(因此发送令牌+用户ID)
  • 将此令牌+用户ID存储在Moodle
  • 使用此令牌在Joomla中使用此令牌创建链接(您可以在首次使用后尽快使用令牌时使用查询字符串,但POST是更好的主意)
  • 当您在Moodle中看到此令牌时,请记录关联的用户并使令牌过期(因此对于回复攻击等是安全的。)

答案 1 :(得分:1)

你可以使用Pro Moodle(http://www.promoodle.com/)或JFusion(http://www.jfusion.org/)这两个比例来为Joomla / Moodle系统创建单一登录系统。

这里还有一个指南:http://myjoomlaextensions.com/images/fbfiles/files/MoodleBridge.pdf“在Moodle和Joomla之间架起桥梁。

有一条指南可以修改Moodle代码,在此处创建单一登录系统:http://moodle.org/mod/forum/discuss.php?d=45126#211486(谨慎使用!)。

尝试在不同的域中使用这些解决方案可能会有所不同。

答案 2 :(得分:0)

如果您正在使用Joomla! 1.5,不要忘记用户插件。看一下plugins / user / example.php。您可以在onLoginUser事件期间捕获密码,这可以帮助您桥接系统。