2009-04-17 42 views
28

我公司开发并销售一个拥有数百个客户的SaaS应用程序。我们的一些客户要求我们支持LDAP集成,以针对其现有系统验证用户帐户,而不必为每位员工创建另一个登录帐户。似乎这在许多地方被称为单点登录(SSO)?当然,我们的系统已经有一个机制来维护用户帐户配置文件并从我们的登录页面验证这些用户帐户。如何为我的web应用程序构建LDAP集成?

我们对LDAP有点无知,并且对一些事情感到困惑。请原谅可能使用错误的术语(请记住,我们对此有点无知)。

我们认为我们理解这如何可能工作的基本知识:

  • 我们的客户配置他们的账户“打开”了他们的帐户“远程认证”功能。他们提供将验证用户身份的远程URL。
  • 用户来到我们的登录页面,并尝试使用其公司的LDAP系统提供的用户名和密码进行登录。
  • 我们的登录页面将安全地将登录凭据(可能是以某种商定的格式进行加密和哈希处理)转发到我们客户提供的“远程验证”URL。
  • 客户的脚本将对用户进行身份验证,然后使用“身份验证状态”将他们重定向回我们的网站。
  • 我们的页面将分析“身份验证状态”,并接受用户登录或不登录。

假设上述信息甚至是半正确的,我们仍然需要每个用户在我们的系统中拥有一个帐户。我们不需要某种方式将我们的用户帐户配置文件与LDAP目录中的用户配置文件同步吗?这仅仅是一个引用LDAP系统中用户ID的“外部ID”?那么是否需要客户的“远程认证”脚本必须将该ID提供给我们的系统,以便我们知道系统中的哪个用户帐户将登录与之关联?

我们缺少什么?

顺便说一句,我们的平台是IIS,ASP.Net 2.0和SQL Server 2005

回答

9

有几种选择。如果您确实是指LDAP,而不是仅仅是Active Directory,那么我可能会考虑使用System.DirectoryServices.Protocols通过安全通道使用提供的凭证执行LDAP绑定。

严格来说,这不是单点登录。 SSO意味着只有在首次登录时才需要提交您的信用。这仅仅是通过只有一个ID来降低用户的复杂性。通常,对于具有混合平台和技术的企业环境中的Windows客户端,SSO是通过添加到管理对各种系统的身份验证的桌面的客户端来实现的。在仅限MS的环境中,如果您的所有Web应用程序均位于IIS上,则可能会实现SSO,您可以使用IE并使用集成Windows身份验证,模拟和所有这些功能。

除非需要预配置配置文件类型的数据,否则您可以考虑在系统中自动注册已通过身份验证的用户。如果您确实需要预配置用户,则可以考虑定期从LDAP目录中导入(全部或过滤子集)用户,并使其处于未配置状态,以便管理员从现有列表中选择不是配置用户而不是输入ID。否则,您可能会冒您的管理员输入错误的用户ID并导致不匹配。

您可以提供一个API,使身份和访问管理解决方案(如果您的Microsoft倾斜,请参阅ILM2 007作为一个示例)可以与您的系统集成并为您执行所有用户帐户管理。

1

你需要决定你打算如何在应用程序中的LDAP用户链接到一个帐户。

例如,您可能需要LDAP系统中的用户名与您的应用中的用户名匹配,或者您可能需要某人在您的应用中的每个用户帐户中明确指定一个LDAP用户名。

一旦你找到了该链接,你可以简单地执行LDAP绑定来测试用户凭证。

3

一如既往地记得验证身份验证测试以确保发送的密码不是空白。

与用户名绑定并且没有密码被认为是根据标准的匿名绑定,并且看起来像成功了!事实上,它确实没有。

这是应用程序需要处理的问题,因为LDAP服务器只是遵循标准,令人讨厌的标准,但仍然是标准。

2

也许考虑认证与授权

认证 - 哪个用户是这样的? 授权 - 谁应该能够使用应用程序,指定用户,组?

目前,您意味着通过身份验证进行授权,因为只有注册到您的应用的用户才允许使用它。

如果使用目录而不是您的自定义数据存储,然后

  • 使用目录连接方法来验证用户
  • 你(可能)获得认证的自由 - 在已知用户的窗口,窗口可以识别iis和sqlserver,也许不需要询问用户他们是谁。
  • 您将知道更多的用户比拥有授权并需要应用限制 - 限制与特定组的连接。
  • 可以将用户数据存储在目录中,而不是将您的应用程序数据存储在sql服务器中。

如果你的用户真正想要的通用LDAP,那么你想看看(C)ldap_connect, ldap_bind_s(C#)LDAPConnection System.DirectoryServices.Protocols

或者再次回到公元此Demystified .Net App single sign on可能有助于

1

这部作品的方式我们的系统:

  • 当用户导航到Web应用程序中,REMOTE_USER服务器变量被认为是用户令牌
  • 登录代码连接到LDAP目录与特定搜索相关的帐户
  • 登录代码查找LDAP帐户是“匹配”的REMOTE_USER
  • 登录代码,然后尝试该帐户匹配在我们的系统中的帐户
  • 如果匹配,可以一路过关斩将,假设用户登录的帐户相匹配,通常

继续通过这种方式,用户可以重新使用我们的应用程序内的Windows域认证。

1

下面是一个有用的软件位,它允许通过Web访问LDAP目录,使用JSON-RPC:Json2Ldap

相关问题