2016-12-29 13 views
0

У меня есть сайт интрасети ASP.NET 4.0, который использует проверку подлинности Windows и обычно работает как пользователь IIS по умолчанию. Я хотел бы олицетворять аутентифицированного пользователя и действовать от их имени. В частности, если этот пользователь является администратором домена, я хочу, чтобы они могли отслеживать службы, запущенные на нескольких серверах, запускать и останавливать эти службы и перезагружать эти серверы, все со страницы интрасети.Управление машинами в сети с использованием сайта интрасети ASP.NET с проверкой подлинности Windows

До сих пор я мог переключать контекст, чтобы олицетворять аутентифицированного пользователя, и я могу проверить группы пользователей AD, чтобы определить, являются ли они администратором домена. Но когда я пытаюсь получить статус служб, работающих на других серверах, я получаю следующее сообщение об ошибке:

Cannot open Service Control Manager on computer 'MyServer'. This operation might require other privileges. ---> System.ComponentModel.Win32Exception: Access is denied

Это хорошо в Visual Studio работает локально. Но не тогда, когда сайт интрасети развернут на внутренний веб-сервер.

В Page_Load я это делаю:

'Switch from IIS User to the currently authenticated Admin user 
Dim impersonationContext As WindowsImpersonationContext = Nothing 
Dim authenticatedIdentity As WindowsIdentity = DirectCast(HttpContext.Current.User.Identity, WindowsIdentity) 
impersonationContext = authenticatedIdentity.Impersonate() 

А потом в GridView «s RowDataBound случае, я делаю это:

'Check if service exists and is running 
Dim arrServices() As ServiceController = ServiceController.GetServices(machineName) 
If Not arrServices.Any(Function(o) o.ServiceName = SERVICE_NAME) Then 
    ' Service is missing... 
Else 
    Dim oServiceController As New ServiceController(SERVICE_NAME, machineName) 
    If oServiceController.Status = ServiceControllerStatus.Running Then 
     ' Service is running... 
    Else 
     ' Service has stopped... 
    End If 
End If 

Как я могу управлять другими серверами от имени пользователя, используя Проверка подлинности Windows на этом сайте интрасети?

+0

Код на самом деле не просто прекращает обработку молча. Возможно, вы должны показать соответствующий код в вопросе. – mason

+0

@mason См. Мой пересмотренный вопрос. У меня была попытка поймать, которая подавляла ошибку. Посмотрите настоящее сообщение об ошибке. – John

ответ

0

Оказывается, в основном есть два уровня токена Windows Identity, который вы можете получить.

Тот, который вы автоматически получаете при использовании проверки подлинности Windows на веб-сайте интрасети, хорош для аутентификации против AD и получения групп пользователей AD. Когда вы переключаетесь на олицетворение этого удостоверения, вы можете получить доступ к локальным ресурсам на веб-сервере в качестве аутентифицированного пользователя Windows, но вы не можете начать доступ к сетевым ресурсам за пределами веб-сервера, на котором запущен сайт интрасети.

Чтобы получить доступ к сети, вам необходимо использовать Windows Winon API Win32. Вам необходимо выполнить «интерактивный» уровень входа и получить токен от этого входа. Затем вы можете олицетворять пользователя по сети. Таким образом, вам нужен пароль пользователя, а не только токен ASP.NET дает вам объект запроса.

 Смежные вопросы

  • Нет связанных вопросов^_^