首页 文章

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

提问于
浏览
31

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

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

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

  • 我们的客户将其帐户配置为"turn on"其帐户的"remote authentication"功能 . 它们提供将对其用户进行身份验证的远程URL .

  • 用户进入我们的登录页面并使用其公司的LDAP系统提供的用户名和密码尝试登录 .

  • 我们的登录页面将安全地将登录凭证(可能是以某种商定的格式加密和散列)转发到我们客户提供的"remote authentication" URL .

  • 客户的脚本将对用户进行身份验证,然后使用"authentication status"将其重定向回我们的站点 .

  • 我们的页面将分析"authentication status"并接受用户登录或不登录 .

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

我们缺少什么?

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

6 回答

  • 10

    有几种选择 . 如果您真的是指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服务器只是遵循标准,令人讨厌的标准,但仍然是标准 .

  • 4

    也许考虑认证和授权

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

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

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

    • 使用目录连接方法对用户进行身份验证

    • 你(可能)得到免费认证 - 用户熟悉windows,windows可以识别iis和sqlserver,也许不需要问用户他们是谁 .

    • 您将知道拥有更多用户而非需要授权并需要应用限制 - 限制与特定组的连接 .

    • 可以将用户数据存储在目录中,而不是存储在sql server中的应用程序数据 .

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

    或者再次回到AD这Demystified .Net App single sign on可能会有所帮助

  • 2

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

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

    找到该链接后,您只需执行LDAP绑定即可测试用户凭据 .

  • 1

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

    • 当用户导航到Web应用程序时,REMOTE_USER服务器变量被假定为用户令牌

    • 登录代码使用特定于搜索的帐户连接到ldap目录

    • 登录代码查找"matches" REMOTE_USER的ldap帐户

    • 登录代码然后尝试将该帐户与我们系统中的帐户相匹配

    • 如果可以一直匹配,假设用户以匹配的帐户登录,则继续正常

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

  • 1

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

相关问题