У меня есть сайт интрасети 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 на этом сайте интрасети?
Код на самом деле не просто прекращает обработку молча. Возможно, вы должны показать соответствующий код в вопросе. – mason
@mason См. Мой пересмотренный вопрос. У меня была попытка поймать, которая подавляла ошибку. Посмотрите настоящее сообщение об ошибке. – John