Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
集成Drupal+;穆德尔&x2B;带有OpenID的MediaWiki_Drupal_Openid_Single Sign On_Mediawiki_Moodle - Fatal编程技术网

集成Drupal+;穆德尔&x2B;带有OpenID的MediaWiki

集成Drupal+;穆德尔&x2B;带有OpenID的MediaWiki,drupal,openid,single-sign-on,mediawiki,moodle,Drupal,Openid,Single Sign On,Mediawiki,Moodle,我希望能够使用这些“同类最佳”的开源解决方案,只需要在不同站点之间进行某种单一登录。我不希望我的用户必须在3个不同的地方登录,所以我认为使用OpenId是可能的 有人尝试过类似的方法吗?OpenID无法避免必须分别登录3次的问题。它允许用户在站点之间共享相同的登录凭据,但他们必须实际登录到三个系统中的每一个。如果这不是问题,请使用OpenID。如果是,您有两个选择: 使用LDAP服务器在所有三个站点上进行身份验证。我认为这三个软件包都有用于LDAP(,)的模块/插件。一旦运行了LDAP服务器,剩

我希望能够使用这些“同类最佳”的开源解决方案,只需要在不同站点之间进行某种单一登录。我不希望我的用户必须在3个不同的地方登录,所以我认为使用OpenId是可能的


有人尝试过类似的方法吗?

OpenID无法避免必须分别登录3次的问题。它允许用户在站点之间共享相同的登录凭据,但他们必须实际登录到三个系统中的每一个。如果这不是问题,请使用OpenID。如果是,您有两个选择:

  • 使用LDAP服务器在所有三个站点上进行身份验证。我认为这三个软件包都有用于LDAP(,)的模块/插件。一旦运行了LDAP服务器,剩下的工作就应该很简单了

  • 为每个平台编写针对单个数据库进行身份验证的自定义模块/插件。也许您可以使用Drupal数据库作为主要数据库,并让MediaWiki和Moodle对此进行身份验证。因此,实际上,用户在Drupal站点上只有一个帐户,但可以访问所有三个帐户。这与LDAP服务器基本相同,但可能会为您节省一些开销和复杂性

  • 对于Drupal来说,还有一种方法可以尝试完成同样的事情,只是在混合中没有MediaWiki。我会查一查


    祝你好运

    这里有三种可能的解决方案:(1)单点登录站点,(2)使用server-site-includes-SSI和(3)-ajax将登录/注册表单注入所有站点

    单一登录站点。

    假设您拥有
    site1.domain.com
    site2.domain.com
    ,并且希望同时在这两个站点登录/注册。可能最简单的方法是创建另一个域,例如,
    login.domain.com
    来完成此任务。您的登录/注册应用程序将需要访问site1和site2的数据库和/或其api。由于登录状态通常位于cookie中,因此您的登录应用程序需要同时将这些登录cookie设置到两个站点(成功登录/注册时)和注销时删除

    要从
    login.domain.com
    为所有站点设置cookie,所有站点必须位于
    .domain.com
    上,cookie域参数必须为
    .domain.com

    如果您的解决方案既需要api访问(其他应用程序)也需要多个应用程序访问同一数据库,那么您可能需要处理数据库事务。这是因为在提交事务之前,新注册将不会在其他站点上可见。例如,在提交具有新注册的事务之前,您不能从登录代码中调用api来检索cookie

    一个重要的细节。如果您已经在site1和/或site2分别注册了用户,但没有在这两个站点上注册,则您的登录站点将不得不处理这些情况,或者您需要在部署新的注册系统时手动同步注册。如果需要额外的用户输入来完成跨站点注册,则无法手动修复。当您添加需要一些新用户输入以进行注册的新站点时,这一点也变得非常重要

    最后,仔细选择域名处理OpenID。据我所知,未经用户同意,不可能跨子域转移openid背书-如果我错了,请纠正我。您不希望仅仅因为决定重命名子域就要求用户重新注册

    服务器端包含(ssi)方法

    另一个解决方案是通过服务器端包含将这些表单注入所有站点。这可能相当困难,取决于所使用的Web服务器的类型,并且工作速度较慢

    这里的一个先决条件是所有应用程序都运行在同一子域上,这样openid就可以为所有应用程序工作

    我曾经为MW(php)和cnprog(python/django)构建了公共用户注册

    我的解决方案是在wiki和论坛站点上显示相同的注册表单,同时使用django生成和处理该表单。我这样做是因为wiki和论坛“皮肤”是如此不同,以至于我不想让访问者在进入注册页面时对网站外观的巨大变化感到惊讶。这很复杂,我不会再这样做:)而是使用单点登录方法

    为了通过mediawiki显示django输出,我创建了一个wiki扩展,打印apache“include virtual”调用,将django生成的内容与wiki输出粘合在一起。这带来了问题

    Apache include virtual on my installation无法发布到子请求,无法从子请求传递cookie,也无法将重定向响应(所有http头都将被抛出)传递到上游用户请求

    所以我添加了“was_posted=true”来标记django的帖子,并添加了一个密码来防止跨站点伪造。要取出cookie,请使用python中的cookie_morsel.output_js()打印它们。因此,javascript必须在客户端上运行才能正常工作。任何重定向都必须使用javascript完成。上传文件(如头像图片)还需要额外的工作

    因此,单点登录可能是最好的解决方案

    ajax可能是一种很好的方法——只需在所有站点中使用javascript构建表单,然后通过ajax提交即可。工作速度快,不会破坏各种网站的外观, 但这不会让那些对javascript过敏的人满意

    实际上,唯一不需要任何javascript的方法是单点登录站点


    因为我花了足够多的时间为MW和django构建这个东西,所以我发布了这篇文章——一个小时的打字并没有什么不同:)。

    听起来更像是一个与编程无关的设置问题。我没有讨论如何构建openi