使用具有Windows身份验证的ASP.NET Intranet站点管理网络上的计算机

时间:2016-12-29 18:41:35

标签: asp.net windows-authentication impersonation

我有一个使用Windows身份验证的ASP.NET 4.0 Intranet站点,通常作为默认的IIS用户运行。我想模仿经过身份验证的用户并代表他们行事。具体来说,如果该用户是域管理员,我希望他们能够监控在多个服务器上运行的服务,启动和停止这些服务,并重新启动这些服务器,所有这些都来自内部网页。

到目前为止,我可以切换上下文来模拟经过身份验证的用户,我可以检查用户的AD组,以确定他们是否是域管理员。但是当我尝试获取其他服务器上运行的服务的状态时,我收到以下错误:

  

无法在计算机“MyServer”上打开服务控制管理器。这个   操作可能需要其他权限。 --->   System.ComponentModel.Win32Exception:访问被拒绝

它在Visual Studio本地工作正常。但不是在将Intranet站点部署到内部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的{​​{1}}事件中,我这样做:

RowDataBound

如何在此Intranet站点上使用Windows身份验证代表用户管理其他服务器?

1 个答案:

答案 0 :(得分:0)

事实证明,您可以获得基本上两级的Windows身份令牌。

在Intranet站点上使用Windows身份验证时自动获得的那个有利于针对AD进行身份验证并获取用户的AD组。当您切换到模拟此身份时,您可以作为经过身份验证的Windows用户访问Web服务器上的本地资源,但是您无法开始访问运行Intranet站点的Web服务器之外的网络资源。

要获得网络访问权限,您需要使用Windows Logon Win32 API。你需要进行一次互动"级别登录并从该登录获取令牌。然后,您可以通过网络模拟用户。因此,您需要用户的密码,而不仅仅是ASP.NET在请求对象中提供的令牌。