如何为我的Web应用程序构建LDAP集成?

41

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

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

我们认为我们了解如何使该机制起作用的基础知识:

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

即使上述信息是半正确的,我们仍然需要每个用户在我们的系统中拥有一个账户。难道我们不需要一些方法来将我们的用户账户配置文件与LDAP目录中的用户配置文件同步吗?这只是一个引用LDAP系统中用户ID的“外部ID”吗?那么客户的“远程身份验证”脚本是否必须向我们的系统提供该ID,以便我们知道将登录与哪个用户账户关联?

我们漏掉了什么?

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

6个回答

12
有几个选项。如果您真的是指LDAP,而不仅仅是Active Directory,那么我可能会考虑使用System.DirectoryServices.Protocols通过安全通道使用提供的凭据执行LDAP绑定。
严格来说,这不是单点登录。SSO意味着只需要在首次登录时提交您的凭据一次。这只是通过仅使用单个ID来减少用户复杂性。通常,在具有各种平台和技术的企业环境中,对于Windows客户端,通过添加到桌面的客户端管理对各种系统的身份验证来实现SSO。在仅限于MS的环境中,如果所有Web应用都在IIS上,您使用IE并使用集成的Windows身份验证、模拟等所有内容,则可以实现SSO。
您可以考虑将经过身份验证的用户自动注册到您的系统中,除非您需要预配置配置文件类型数据。如果您需要预配置用户,则可以考虑定期从LDAP目录中导入(全部或过滤后的子集)用户,并使它们处于未配置状态,以便管理员从现有的未配置用户列表中进行选择,而不是键入ID。否则,您就有风险让管理员输入错误的用户ID并出现不匹配。
您可以提供一个API,以便身份和访问管理解决方案(给出您的Microsoft倾斜,ILM2 007就是一个例子)能够集成到您的系统中并为您执行所有用户账户管理。

6

请始终记住验证认证测试,以确保发送的密码不为空。

使用用户名而没有密码进行绑定被认为是匿名绑定,根据标准,看起来好像已经成功了!但实际上并非如此。

这是应用程序需要处理的问题,因为LDAP服务器只是遵循标准,这是一个烦人的标准,但依然是一个标准。


2
也许考虑认证与授权之间的区别。
认证 - 这是哪个用户? 授权 - 谁应该能够使用应用程序,指定用户,组?
目前,您通过身份验证来暗示授权,因为只有那些注册到您的应用程序的用户才被允许使用它。
如果您使用目录而不是自定义数据存储,则:
- 使用目录连接方法来验证用户 - 您(可能)可以免费获得身份验证 - 用户已知于Windows,Windows可以识别为IIS和SQLServer,可能无需问用户他们是谁。 - 您将了解更多用户的信息,而这些用户并没有获得授权,并且需要应用限制 - 限制连接到特定组。 - 可以将用户数据存储在目录中,而不是在SQL Server中的应用程序数据中。
如果您的用户真的想要通用LDAP,则应该查看(C)ldap_connect、ldap_bind_s (C#) LDAPConnection System. DirectoryServices.Protocols。
再次回到公元年,这个Demystified .Net App单一登录可能会有所帮助。

1

这里有一个非常有用的软件,它允许使用JSON-RPC通过Web访问LDAP目录:Json2Ldap


1

我们系统的运作方式:

  • 当用户浏览 Web 应用程序时,REMOTE_USER 服务器变量被假定为用户令牌
  • 登录代码使用特定于搜索的帐户连接到 LDAP 目录
  • 登录代码查找“匹配”REMOTE_USER的 LDAP 帐户
  • 然后尝试将该帐户与我们系统中的帐户匹配
  • 如果能够完全匹配,则假定用户已登录为匹配的帐户,并正常进行

这样,用户可以在我们的应用程序中重复使用他们的 Windows 域身份验证。


1

您需要决定如何将LDAP用户链接到应用程序中的帐户。

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

一旦您弄清楚了该链接,就可以执行LDAP绑定以测试用户凭据。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接