40

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

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

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

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

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

我们缺少什么?

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

4

6 回答 6

12

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

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

您可以考虑将经过身份验证的用户自动注册到您的系统中,除非您需要预先配置配置文件类型的数据。如果您确实需要预先配置用户,您可以考虑定期从 LDAP 目录导入(所有或过滤的子集)用户,并将它们置于未配置状态,以便管理员从现有的未配置列表中选择- 配置用户而不是输入 ID。否则,您的管理员可能会输入错误的用户 ID 并出现不匹配的情况。

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

于 2009-08-29T15:04:55.273 回答
6

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

根据标准,具有用户名且没有密码的绑定被视为匿名绑定,并且看起来已经成功!事实上,它真的没有。

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

于 2009-04-19T01:47:37.923 回答
2

也许考虑身份验证与授权

身份验证 - 这是哪个用户?授权 - 谁应该能够使用应用程序、指定的用户、组?

目前,您通过身份验证暗示授权,因为只有那些注册到您的应用程序的人才能使用它。

如果您使用目录而不是自定义数据存储,那么

  • 使用目录连接方式对用户进行认证
  • 您(可能)免费获得身份验证 - windows 知道用户,windows 可以识别 iis 和 sqlserver,也许不需要问用户他们是谁。
  • 您将知道更多的用户,而不是拥有授权并需要应用限制 - 限制与特定组的连接。
  • 可以将用户数据存储在目录中,而不是与您的应用程序数据一起存储在 sql server 中。

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

或者再次回到 AD 这个Demystified .Net App 单点登录可能会有所帮助

于 2009-09-15T14:51:23.030 回答
1

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

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

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

于 2009-04-17T20:33:40.010 回答
1

这在我们的系统中的工作方式:

  • 当用户导航到 Web 应用程序时,REMOTE_USER 服务器变量被假定为用户令牌
  • 登录代码使用特定于搜索的帐户连接到 ldap 目录
  • 登录代码查找“匹配”REMOTE_USER 的 ldap 帐户
  • 然后登录代码尝试将该帐户与我们系统中的帐户进行匹配
  • 如果一直可以匹配,假设用户登录为匹配账号,正常继续

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

于 2009-09-15T15:09:55.923 回答
1

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

于 2010-08-24T11:11:25.050 回答