以编程方式获取应用程序池身份验证。

40
我如何在C#中以编程方式获取应用程序池的标识?我想要应用程序池用户,而不是当前登录的用户。
3个回答

60

您可以使用 System.Security.Principal.WindowsIdentity.GetCurrent().Name 来识别当前应用程序正在运行的身份。 这个链接 提供了一个很好的实用工具,可以显示 aspx 运行的身份。


如果我在IIS管理器中更改了appPool身份,那么System.Security.Principal.WindowsIdentity.GetCurrent().Name不应该获取到更改后的值吗? - p0enkie
11
如果有人正在困扰,以下是我用来获取启动应用程序池(即其身份)的用户名的代码: ApplicationPool pool = serverManager.ApplicationPools["YourAppPoolName"]; pool.ProcessModel.IdentityType = ProcessModelIdentityType.SpecificUser; string user = pool.ProcessModel.UserName; - p0enkie
3
"serverManager" 是什么? - Kiquenet
它位于C:\ Windows \ System32 \ inetsrv \ Microsoft.Web.Administration.dll中。var serverManager = new ServerManager(); - Steven Bone

9

您需要引用Microsoft.Web.Administration(在Microsoft.Web.Administration.dll中)。 Microsoft.Web.Administration.dll位于C:\Windows\System32\inetsrv。

//Add this to your using statements:
using Microsoft.Web.Administration;

//You can get the App Pool identity like this:    
public string GetAppPoolIdentity(string appPoolName)
{
    var serverManager = new ServerManager();

    ApplicationPool appPool = serverManager.ApplicationPools[appPoolName];
    appPool.ProcessModel.IdentityType = ProcessModelIdentityType.SpecificUser;
    return appPool.ProcessModel.UserName;            
}

我使用了这段代码,但它返回了空字符串。可能的原因是什么?我刚刚以编程方式创建了一个应用程序池,并且正在使用我刚刚创建的相同池名称。 - devanalyst

3

另一种可能性是对我来说工作得相当好,而且不需要安装Microsoft.Web.Administration包及其众多依赖项:

string appPoolUserIdentity = WindowsIdentity.GetCurrent().Name;

From forums.asp.net


不错的回答,但是和被采纳的答案建议基本相同,不是吗?被采纳的答案建议使用:System.Security.Principal.WindowsIdentity.GetCurrent().Name - Nate Anderson
这可能等同于相同的结果。我提到它是因为似乎更简单,不需要所有的Using。 - Vanquished Wombat

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接