Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net LDAP用户属性请求返回异常结果_Asp.net_Vb.net_Ldap - Fatal编程技术网

Asp.net LDAP用户属性请求返回异常结果

Asp.net LDAP用户属性请求返回异常结果,asp.net,vb.net,ldap,Asp.net,Vb.net,Ldap,在验证用户是否存在后,我正在努力使用LDAP从AD返回用户详细信息。 我使用一个简单的auth方法,如下所示: Function AuthenticateUser(path As String, user As String, pass As String) As Boolean Dim de As New DirectoryEntry(path, user, pass, AuthenticationTypes.Secure) Try Dim ds As Dire

在验证用户是否存在后,我正在努力使用LDAP从AD返回用户详细信息。 我使用一个简单的auth方法,如下所示:

Function AuthenticateUser(path As String, user As String, pass As String) As Boolean
    Dim de As New DirectoryEntry(path, user, pass, AuthenticationTypes.Secure)
    Try
        Dim ds As DirectorySearcher = New DirectorySearcher(de)
        Dim result As SearchResult = ds.FindOne()

        If result Is Nothing Then Return False


'>>DEBUG OUTPUTS ONLY:
        displayName.Text = result.GetDirectoryEntry().Properties.Item("distinguishedName").Value
        displayName.Text += result.GetDirectoryEntry().Properties("name").Value


        Return True
    Catch
        Return False
    End Try
End Function
问题是“DifferentizedName”返回“DC=our domain,DC=co,DC=uk” 而“name”只返回“我们的域”,而不是刚刚经过身份验证的用户的名称

注意:displayName.text输出仅用于调试目的

我尝试了各种请求组合,但似乎没有返回用户详细信息

ETA:对安全警察说:这一切都在https连接中,我不会用明文发送密码

1. Dim de As New DirectoryEntry(path, user, pass, AuthenticationTypes.Secure)
2. Try
3.    Dim ds As DirectorySearcher = New DirectorySearcher(de)
4.    Dim result As SearchResult = ds.FindOne()
第1行基本上是创建一个
DirectoryEntry
元素,该元素引用
路径中的对象。
用户名
密码
参数的唯一用途是访问
路径
所指的任何实体

由于您当前拥有一些东西,您将绑定到域,而不是用户(但您有权作为该用户连接到域)

然后,在第3行中,创建一个。但是您正在使用的构造函数只是说在
de
处作为搜索的根(正如我们所建立的,它只是域)。你还没有做任何事情来搜索域内的特定用户-他们可以连接执行几乎任何可以想象的搜索

您可能想做的是查看DirectorySearcher的重载,并提供一个筛选器参数,将搜索限制为仅限于用户。我不知道
用户
参数的形式是什么-如果是,比如说,以用户主体名称(
user@domain
),您可以尝试指定以下过滤器:

Dim ds As DirectorySearcher = New DirectorySearcher(de,"(userPrincipalName=" + user + ")")
如果您只有一个用户名,则需要搜索
sAMAccountName
。如果您有一个旧样式的域名(
domain\user
),那么通常您希望在
\
上拆分该域名,放弃该域名,然后仍然在
sAMAccountName
上搜索


有关构造筛选器参数的一些帮助(但不是太多!)可以在中找到。

与“FindOne”而不是“FindAll”有关的内容?好吧,也许吧,但我只想找到一个。。我认证的用户?!你的
path
参数是什么?path是要登录的域(我们有多个广告服务器/域)是的,我想可能是这样的-因为它只返回非常有限的域信息。我已经在DirectorySearcher中添加了“(sAMAccountName=“+user+”),现在一切都好了!!谢谢你!非常地不过,我可能说得太早了。似乎我能检索到的唯一属性是“name”@DarkcatStudios-您是否尝试将更多属性添加到
PropertiesToLoad
和/或切换到接受这些属性的?