【问题标题】:How can LDAP-based SSO between .Net and PHP systems be done?如何在 .Net 和 PHP 系统之间完成基于 LDAP 的 SSO?
【发布时间】:2013-02-24 07:19:34
【问题描述】:

我一直在使用 LAMP 系统,所以我对 MS 技术相对一无所知。我们有一个客户,其现有网站由名为 sitecore 的 .Net CMS 提供支持。他们想使用我们的产品之一,这是另一个由 LAMP 技术提供支持的网络系统。为简单起见,假设您输入 site.com,您将进入网站的 sitecore 部分,如果您输入 app.site.com,您将进入我们的 LAMP 应用。

我们的目标是整合这两个系统。因此,.Net 主网站将有“登录”表格,每当填写该表格时,用户都应在 .Net 系统和我们的 LAMP 系统中登录。我们显然可以完全控制我们的 LAMP 系统,我们可以在那里编写任何处理程序,但是我们对 .Net 系统没有太多控制权。我做了一些研究,LDAP 似乎是人们在这种情况下实施 SSO 的标准方式,但我仍在试图弄清楚它是如何工作的。我目前的理解是 LDAP 类似于一个外部数据库,一旦 .Net 系统配置为使用它(sitecore 确实提供了这种集成),登录表单中输入的登录+密码将针对 LDAP 进行验证。我不清楚的是,每当用户登录时,我们的 LAMP 系统将如何得到通知?所以我基本上很难理解这种集成的一般流程:用户访问 .Net 网站,输入登录+密码,获得身份验证,.Net 网站将其存储在 cookie/会话中(或在此类系统中用于这些目的的任何内容)然后我们的 LAMP 系统不知何故需要做同样的事情,但我不知道该怎么做。

【问题讨论】:

    标签: .net ldap sitecore single-sign-on lamp


    【解决方案1】:

    系统基于什么并不重要。我认为您只需要很好地了解单点登录的实际工作原理,然后您就会发现它可以与任何东西一起使用。

    我将用非常基本的术语解释单点登录的工作原理。在此示例中,我们有以下站点:

    • 站点 A = Sitecore 站点
    • 站点 B = LAMP 站点

    以下流程实现单点登录:

    1. 用户访问 Site-A 并登录
    2. 站点 A 生成安全令牌((*) - 见下文)并将其存储在数据库中 (我们称之为 SQL)
    3. 站点 A 设置了一个 cookie,表明用户已登录
    4. 站点 A 将用户重定向到站点 B 并传递用户名、安全性 令牌和返回 URL(登录后要去的位置)
    5. 站点-B 收到数据,获取用户名,生成令牌 它自己并将其与传递的令牌进行比较
    6. 如果令牌匹配,这意味着用户可以通过身份验证,Site-B 设置 指示用户已登录的 cookie
    7. 站点 B 重定向到返回 URL
    8. 用户现在同时登录了站点 A 和站点 B

    (*) -- 可以使用用户名 + 盐(比如说,作为双方都知道的秘密字符串值)之类的东西生成安全令牌,这两者的连接是加密的使用 MD5。 所以假设用户名是“joe”,salt 是“supersecret”,连接是“joesupersecret”,结果是一个 MD5 哈希。

    请注意,这只是其工作原理的一个非常基本的示例。实际上,此实现有很多变体,但都归结为相同的基础。

    如您所见,无论您使用的是 .NET 还是 PHP 系统,它们是否通过 LDAP 或其他方式进行身份验证都无关紧要;每个系统都处理自己的身份验证方法。

    【讨论】:

    • 这可行,但它不是更像自定义 SSO 实现吗?在研究该主题时,我的印象是 MS 提供了一些称为 LDAP SSO 的内置 SSO 机制。这听起来像是 Apache 的 HTTP 身份验证的一种变体——它是由服务器完成的,然后服务器可以以某种方式通知其他服务器有关成功的信息,并使 $_SERVER['REMOTE_USER'] 变量可供使用。像 drupal.org/node/1371478 这样的东西我还是无法理解其他服务器如何安全地接收有关身份验证成功的信息。
    【解决方案2】:

    LDAP 只是用于很多事情的存储解决方案。您也可以在其中存储密码并询问 LDAP 给定的密码对于给定的用户是否可以。因此,您可以使用 LDAP 进行身份验证。由于很多系统都可以使用一个 LDAP,因此您可以围绕 LDAP 构建“一个密码”解决方案。

    要按照您指定的方式使用真正的 SSO,还有一些工作要做,因为令牌的生成等远远超出了 LDAP 的范围。

    有一个名为 KERBEROS 的解决方案可用于基于 LDAP 身份验证的 SSO。它是 Microsoft 的 ActiveDirectory 或 Apple 的 OpenDirectory 等使用的解决方案。我相信.Net 可以使用它,据我所知,有一些方法可以“kerberize” apaches httpd 以使用真正的 SSO。

    欲了解更多信息,请查看http://en.wikipedia.org/wiki/Kerberos_%28protocol%29

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-09
      • 2016-11-21
      • 1970-01-01
      • 1970-01-01
      • 2015-10-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多