2016-12-29 2 views
0

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認証?

+0

コードは実際にはサイレント処理を停止しません。おそらくあなたは質問に関連するコードを表示するべきです。 – mason

+0

@mason改訂された質問をご覧ください。私はエラーを抑制していたtry catchを持っていました。今実際のエラーメッセージを見てください。 – John

答えて

0

基本的に2つのレベルのWindows IDトークンがあります。

イントラネットサイトでWindows認証を使用すると自動的に取得されるのは、ADに対する認証とユーザーのADグループの取得に適しています。このIDを偽装するように切り替えると、認証されたWindowsユーザーとしてWebサーバー上のローカルリソースにアクセスできますが、イントラネットサイトが実行されているWebサーバー以外のネットワークリソースへのアクセスを開始することはできません。

ネットワークアクセスを取得するには、Windows Logon Win32 APIを使用する必要があります。 「インタラクティブ」レベルのログインを実行し、そのログインからトークンを取得する必要があります。その後、ネットワークを介してユーザーを偽装することができます。したがって、ASP.NETが要求オブジェクトに与えるトークンだけでなく、ユーザーのパスワードが必要です。

関連する問題