Active Directory Query ASP VB .Net работает только на доверенных сайтах - PullRequest
1 голос
/ 10 января 2011

У меня есть веб-приложение ASP .Net, написанное на Visual Basic .Net, работающее на Windows Server 2003 (IIS 6), которое работает так же, как описано в Как получить учетные данные AD с клиентского компьютера в веб-приложении?

Пользователь получает доступ к нашей странице в интрасети и использует аутентификацию Windows для идентификации пользователя.Затем приложение ищет этого пользователя в Active Directory и получает значение атрибута для IpPhone этого пользователя.Это число, которое мы используем для идентификаторов сотрудников.

В IE8 я могу получить доступ к сайту, и Windows Auth запрашивает меня, и он работает, но приложение не может получить значение «IP-телефон» моего пользователя Active Directory (Ака мой номер сотрудника).Если я добавлю URL-адрес на доверенные сайты, приложение успешно получит мой идентификатор сотрудника.

Это не будет иметь большого значения, за исключением того, что это происходит во всех браузерах (FireFox, Safari и Chrome).Я нашел обходной путь для Firefox (ntlm-authenticate, Google 'about config' для Firefox).Однако это приложение не обязательно должно быть на доверенных сайтах, и я верю, что если я смогу заставить его работать, не будучи на доверенных сайтах, оно будет работать во всех браузерах.

Кто-нибудь знает, что происходит?Заранее спасибо.

1 Ответ

0 голосов
/ 10 января 2011

Посмотрите на настройки на скриншоте ниже.Автоматический вход в систему означает использование вашей аутентификации Windows при доступе к ресурсам через Internet Explorer.Другими словами, если вы обращаетесь к веб-странице на сервере в вашем каталоге, учетные данные, которые вы вошли на свою машину, автоматически передаются на сервер, к которому вы обращаетесь.

Обычно учетные данные предназначены длякакая-то неизвестная мне причина перешла и на доверенные сайты.Я не знаю, почему это так, но я видел такое поведение достаточно, чтобы быть уверенным, заявив его.

Эта функция доступна только в IE, за исключением обходного пути, который вы нашли для Firefox, и не будет работатьв других браузерах, если вы не найдете похожие обходные пути.

Лучшим решением было бы указать имя пользователя и пароль в коде, как показано здесь:

http://msdn.microsoft.com/en-us/library/wh2h7eed.aspx

Это выполняет поиск и передает имя пользователя и пароль,вместо того, чтобы полагаться на встроенную безопасность Windows.

alt text

У меня есть рабочий фрагмент кода для получения электронного письма на основе имени пользователя в нашем домене, который вы можете изменить для своих нужд:

Public Function GetEmailFromUserName(ByVal UserID As String) As String
    Dim ReturnValue As String = ""


    Dim myAD As New System.DirectoryServices.DirectoryEntry("LDAP://mydomain", System.Configuration.ConfigurationManager.AppSettings("adsearchname"), System.Configuration.ConfigurationManager.AppSettings("adsearchpwd"))
    Dim searcher As New System.DirectoryServices.DirectorySearcher(myAD)
    searcher.Filter = ("(anr= " & UserID & ")")
    searcher.PropertiesToLoad.Add("mail")
    For Each myResult As System.DirectoryServices.SearchResult In searcher.FindAll()
        For Each Key As String In myResult.Properties.PropertyNames
            If InStr(myResult.Properties.Item(Key).Item(0), "@") Then
                ReturnValue = myResult.Properties.Item(Key).Item(0)
            End If
        Next
    Next

    Return ReturnValue
End Function
...