Моя проблема здесь заключается в том, как бороться с безопасностью и правильной реализацией олицетворения, которое будет работать с клиентского компьютера и правильно аутентифицироваться на моем IIS-сервере, который передает еще действующий билет олицетворения вместе с запросом LDAP.
Моя система - это независимый сервер, работающий в интрасети моей компании, на котором размещены контроллер домена, сервер LDAP и т. Д. И используется протокол Kerberos.
- Информация о системе: IIS7 с аутентификацией Windows и имитатором в Windows 7 x64
- Информация о сети: IIS 6, LDAP, Kerberos
Вот мой метод VB.NET.
Protected FirstName, LastName, EMail As String
Protected Sub Lookup(ByVal UserName As String)
UserName = Trim(UserName)
UserName = Replace(UserName, "\", "/")
UserName = Right(UserName, Len(UserName) - InStr(1, UserName, "/"))
Using (Hosting.HostingEnvironment.Impersonate) 'ADDED
Dim directoryEntry As New DirectoryEntry("LDAP://dl/DC=dl,DC=net")
'directoryEntry.AuthenticationType = AuthenticationTypes.Delegation 'REMOVED
Dim ds As New DirectorySearcher(directoryEntry)
Dim r As SearchResult
Try
ds.PropertiesToLoad.Add("givenName") 'First Name
ds.PropertiesToLoad.Add("sn") 'Last Name
ds.PropertiesToLoad.Add("mail") 'Email
ds.Filter = "(&(objectCategory=person)(objectClass=user)(sAMAccountName=" & UserName & "))"
r = ds.FindOne 'Query LDAP; find record with UserName.
'Populates all the variables retrieved from LDAP.
FirstName = If(r.Properties.Contains("givenName"), Trim(r.Properties("givenName").Item(0)), "")
LastName = If(r.Properties.Contains("sn"), Trim(r.Properties("sn").Item(0)), "")
If IsNothing(r.Properties.Contains("mail")) Then
EMail = If(r.Properties.Contains("userPrincipalName"), Trim(r.Properties("userPrincipalName").Item(0)), "")
Else
EMail = If(r.Properties.Contains("mail"), Trim(r.Properties("mail").Item(0)), "")
End If
EMail = EMail.ToLower
Catch ex As Exception
'Error Logging to Database Here
End Try
End Using
End Sub
Пожалуйста, задавайте любые вопросы, необходимые для получения информации, которая вам нужна, чтобы помочь мне. Я исследовал это в течение нескольких недель, и кажется, что Олицетворение имеет такое безумное количество переменных, что я мог легко потеряться. Я просто не могу понять, как реализовать это в моем коде ... Я все еще довольно плохо знаком с .NET: (