Выдавать себя за делегирование или более одного прыжка на Kerberos?Полностью потерян - PullRequest
3 голосов
/ 10 февраля 2012

Моя проблема здесь заключается в том, как бороться с безопасностью и правильной реализацией олицетворения, которое будет работать с клиентского компьютера и правильно аутентифицироваться на моем 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: (

1 Ответ

2 голосов
/ 13 февраля 2012

Вам не нужно настраивать AuthenticationType, чтобы это работало. Однако вам необходимо убедиться, что учетная запись службы (или учетная запись компьютера, если сетевая служба), на которой размещен приведенный выше код, может делегироваться службе LDAP на всех контроллерах домена в вашей среде.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...