Windows認証を使用し、通常は既定のIISユーザーとして実行されるASP.NET 4.0イントラネットサイトがあります。私は、認証されたユーザーを偽装して代わって行動したいと思います。具体的には、そのユーザーがドメイン管理者である場合、イントラネットページから複数のサーバーで実行されているサービスを監視し、それらのサービスを開始および停止し、それらのサーバーを再起動できるようにします。Windows認証を使用してASP.NETイントラネットサイトを使用してネットワーク上のコンピュータを管理する
これまでは、認証されたユーザーを偽装するためにコンテキストを切り替えることができ、ユーザーのADグループを確認して、ドメイン管理者であるかどうかを判断できます。しかし、他のサーバー上で実行されているサービスの状態を取得しようとすると、次のエラーが発生します。
Cannot open Service Control Manager on computer 'MyServer'. This operation might require other privileges. ---> System.ComponentModel.Win32Exception: Access is denied
Visual Studioでローカルで正常に動作します。しかし、イントラネットサイトが内部Webサーバーに展開されているときはそうではありません。 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
さん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改訂された質問をご覧ください。私はエラーを抑制していたtry catchを持っていました。今実際のエラーメッセージを見てください。 – John