LDAP 身份验证通过凭据
Posted
技术标签:
【中文标题】LDAP 身份验证通过凭据【英文标题】:LDAP Authentication pass credentials 【发布时间】:2013-09-12 15:49:05 【问题描述】:我需要将 LDAP 凭据传递给 Web 服务以在 C# 中进行身份验证。
我已经完成所有设置,可以让用户使用 DirectoryEntry,但是,由于显而易见的原因,我无法获得密码。
我通过传递用户名/密码来向 C# 中的第三方 Web 服务进行身份验证,例如:j_username=me%40domain.com&j_password=mypassword%21
我知道获取 LDAP 密码是不可能的,但有没有更好的方法来处理我正在做的事情?
【问题讨论】:
【参考方案1】:我想说你的问题不是很清楚。您说您无法获取密码,但是您正在传递密码,那么我们不是在谈论相同的密码,您说的是LDAP管理员密码吗?但问题是什么?请提供更多信息。 我会冒险告诉你,如果你的应用程序有一个应用程序服务器,你还可以从服务器配置对 LDAP 目录的访问,这样你就可以直接针对应用程序服务器而不是 LDAP 服务进行身份验证。它有帮助吗?请提供更多信息。
【讨论】:
基本上我需要从 LDAP 获取用户密码才能将其传递给我的第三方服务。这有帮助吗? 那么,LDAP 目录管理员必须允许您获取该数据才能继续。建议你先问清楚。想一想,如果任何应用程序能够从 LDAP 目录中的所有用户那里检索密码,那将是一个安全漏洞。你不觉得?在澄清要求之前,请与您的同行进行一些内部研究。【参考方案2】:您可以从 Active Directory 中retrieve a users password,但它需要在服务器本身上启用特殊设置,并且在安全实践方面通常被忽视。
您最好向用户提供一个简单的表单,用户可以在其中输入用户名和密码,然后将绑定请求发送到目录服务器。诚然,虽然看起来您当前通过 Web 服务的实现是可行的,但我会根据谁将使用该应用程序采取稍微不同的方法:
如果这是您组织内的内部应用程序,您可以强制通过 IIS 进行网络登录,这样就不需要 Web 服务。您可以在此处查看this link 以获取一般概述,或查看this one 以获取代码示例的更详细说明。
如果此应用程序是外部可用的,则在针对 Active Directory 授权用户方面,您有很多选择 - 但是,您仍然需要包含用户名和密码字段的表单。我已经写了一些关于这个主题的答案(在 C# 中),并且代码本身以 System.DirectoryServices
命名空间为中心。有一个例子on this thread,还有on this one。
希望对您有所帮助 - 如果您有任何其他问题,请随时给我发消息。
【讨论】:
以上是关于LDAP 身份验证通过凭据的主要内容,如果未能解决你的问题,请参考以下文章
Grails - Spring 安全 ldap 活动目录身份验证 - 凭据错误错误
通过spring security进行的Active Directory身份验证会返回由LDAP引起的有效用户的错误凭据:错误代码49
使用 Acegi 和 Grails 通过 LDAP 进行身份验证时出现 PartialResultException
通过 Spring security ldap 对用户进行身份验证时未授予任何权限错误
在 Spring Security(spring-boot 项目)中使用 ldap 凭据进行 Http 基本身份验证以保护休息服务调用