Я пытаюсь использовать встроенную аутентификацию Windows в сочетании с DirectorySearcher для идентификации и аутентификации пользователя в интрасети.
Мне удалось получить довольно простой код, который, казалось бы, добился цели, но когда я попробовал на живом сервере, я получил следующую ошибку:
"Указанный домен либо не существует, либо с ним невозможно связаться"
Я не могу отладить приложение на работающем сервере, поэтому скопировал его на старый сервер разработки для тестирования там. Когда я нормально запустил приложение, оно показало ту же ошибку, поэтому я попытался отладить в VS .... за исключением того, что оно работало отлично.
Я подозреваю, что это связано с олицетворением или с вызовом LDAP - очевидно, когда он работает для отладчика, трудно быть уверенным в том, что является настоящей проблемой.
Но я полагал, что один из вас, ребята, сможет указать мне правильное направление.
Фрагменты из моего класса аутентификации:
Private Function GetUserID() As String
Dim sID As String = HttpContext.Current.User.Identity.Name
Return Mid(sID, InStr(sID, "\") + 1)
End Function
Private Function GetDisplayName() As String
Dim oSearcher As New DirectorySearcher
Dim oResult As SearchResult
Dim sName As String = String.Empty
With oSearcher
.Filter = String.Format("(SAMAccountName={0})", _UserID)
.PropertiesToLoad.Add("displayName")
oResult = .FindOne()
If Not oResult Is Nothing Then
sName = oResult.Properties("displayName")(0).ToString()
End If
End With
Return sName
End Function
Private Function GetEmail() As String
Dim oSearcher As New DirectorySearcher
Dim oResult As SearchResult
Dim sEmail As String = String.Empty
With oSearcher
.Filter = String.Format("(SAMAccountName={0})", _UserID)
.PropertiesToLoad.Add("mail")
oResult = .FindOne()
If Not oResult Is Nothing Then
sEmail = oResult.Properties("mail")(0).ToString()
End If
End With
Return sEmail
End Function
Private Function GetGroups() As StringCollection
Dim oSearcher As New DirectorySearcher
Dim oResult As SearchResult
Dim colGroups As New StringCollection
Dim i As Int16
With oSearcher
.Filter = String.Format("(cn=" & _UserName & ")", _UserID)
.PropertiesToLoad.Add("memberOf")
oResult = .FindOne()
If Not oResult Is Nothing Then
Dim iGroupCount As Int16 = oResult.Properties("memberOf").Count
For i = 0 To iGroupCount - 1
colGroups.Add(oResult.Properties("memberOf")(i).ToString())
Next
End If
End With
Return colGroups
End Function