标签: applicationpoolidentity

使用应用程序池标识的IIS应用程序丢失主令牌?

(这是一个关于模糊问题的问题.我试图提供所有相关数据,希望有人提供有用的信息;为长篇描述道歉.)

我们的网络应用

我们有一个在IIS 7.5中运行的.NET 4 Web应用程序,可以访问Active Directory和SQL Server数据库.

此Web应用程序在一个虚拟的"应用程序池标识"运行,通过设置应用程序的应用程序池的标识ApplicationPoolIdentity.可以在StackOverflow答案和它所引用的博客文章中找到虚拟身份的简明描述:应用程序池标识只是一个附加组,它被添加到作为"网络服务"运行的Web应用程序的工作进程中.但是,一位消息人士模糊地暗示"网络服务和ApplicationPoolIdentity确实存在IIS.net站点文档不发布的差异".因此,虚拟身份可能不仅仅是一个额外的群体.

我们选择使用ApplicationPoolIdentity而不是NetworkService,因为它成为IIS 7.5中的默认设置(参见,例如,此处),并且根据Microsoft的建议:"此身份允许管理员指定仅与应用程序所属身份相关的权限池正在运行,从而提高了服务器的安全性." (来自processModel元素,用于为applicationPools添加[IIS 7设置架构])"应用程序池标识是一个强大的新隔离功能","使运行的IIS应用程序更安全可靠."(来自IIS.net文章"应用程序池标识")

该应用程序使用集成Windows身份验证,但<identity impersonate="false"/>不是最终用户的身份,而是使用虚拟应用程序池标识来运行我们的代码.

此应用程序使用System.DirectoryServices类(即ADSI API)查询Active Directory .在大多数地方,这是在不指定其他用户名/密码或其他凭据的情况下完成的.

此应用程序还使用Integrated Security=true连接字符串连接到SQL Server数据库.如果数据库是本地的,那么我们看到IIS APPPOOL\OurAppPoolName用于连接数据库; 如果数据库是远程的,则使用计算机帐户OURDOMAIN\ourwebserver$.

我们的问题

我们经常遇到以下一种方式导致工作安装失败的问题.

  • 当数据库位于远程系统上时,数据库连接开始失败:"用户登录失败'NT AUTHORITY\ANONYMOUS LOGON'.原因:基于令牌的服务器访问验证因基础结构错误而失败.检查以前的错误." 先前的错误是"错误:18456,严重性:14,状态:11." 所以似乎现在OURDOMAIN\ourwebserver$不再使用,而是尝试匿名访问.(我们有轶事证据表明UAC关闭时出现了这个问题,并且在打开UAC后它就消失了.但请注意,更改UAC需要重新启动......)IIS.net线程中报告了类似的问题"使用ApplicationPoolIdentity连接到SQL",特别是在一个回复中.

  • 通过ADSI(System.DirectoryServices)的Active Directory操作开始失败,错误0x8000500C("未知错误"),0x80072020("发生操作错误.")或0x200B("指定的目录服务属性或值不存在") .

  • 从Internet Explorer登录应用程序开始失败,出现HTTP 401错误.但是如果在IIS中我们然后在谈判之前放置NTLM然后再次工作.(请注意,Kerberos需要访问AD,但NTLM不需要访问AD.)IIS.net线程"使用AppPool标识失败的窗口身份验证"中报告了类似的问题.

我们的假设和解决方法

将应用程序池从ApplicationPoolIdentity切换到NetworkService时,至少AD和登录问题似乎总是消失.(我们发现有一份报告证实了这一点.)

页面"解决ASP页面上的身份验证问题"有一些与主要和次要令牌相关的建议,我发现它令人鼓舞的是它链接了我们的前两个错误:它提到了NT AUTHORITY\ANONYMOUS LOGON访问,AD错误0x8000500C和"指定的目录服务属性或值不存在". …

asp.net adsi active-directory iis-7.5 applicationpoolidentity

59
推荐指数
1
解决办法
5万
查看次数

以编程方式获取应用程序池标识

如何在C#中以编程方式获取appPool的标识?我想要应用程序池用户而不是当前登录的用户.

c# iis application-pool applicationpoolidentity

33
推荐指数
2
解决办法
3万
查看次数

由于权限不足,无法读取配置文件

在我升级到Windows Server 2008环境之前,我试图在本地计算机上的IIS实例上测试我的Web服务.当我尝试浏览该服务时,我得到了这个.我已经创建了一个自定义应用程序池,该服务将在btw下运行.所以我猜这个应用程序ID没有权限访问该文件夹等...我得到这个小细节顺便说一下......

"读取Web服务器或Web应用程序的配置文件时出现此错误.在某些情况下,事件日志可能包含有关导致此错误的更多信息."

我想我需要提供该应用程序的身份权限,但我不确定如何实现这一点.

还有另一种方法可以完成这项工作吗?

iis applicationpoolidentity

28
推荐指数
3
解决办法
9万
查看次数

如何使用PowerShell为证书私钥授予用户权限?

证书已安装在计算机上.现在我想给应用程序用户提供有关证书PrivateKey的读取权限.

permissions powershell certificate applicationpoolidentity private-key

20
推荐指数
3
解决办法
2万
查看次数

连接as和应用程序池标识之间的区别

在IIS 7.5中,对于应用程序,在基本设置下有一个"连接为"选项.这是什么?为什么要引入此功能?它会覆盖应用程序池标识还是反过来?

iis applicationpoolidentity

11
推荐指数
1
解决办法
1万
查看次数

IIS 7.5应用程序池使用错误的%APPDATA%作为自定义用户身份

我希望我的MVC3 Web应用程序访问%APPDATA%(例如C:\Users\MyUsername\AppData\Roaming在Windows 7上),因为我在那里存储配置文件.因此,我在IIS中创建了一个具有用户"MyUsername"标识的应用程序池,通过使用该帐户登录创建了该用户的配置文件,并打开了"加载用户配置文件"选项(默认情况下仍为true).模拟被关闭.

现在我遇到%APPDATA%(在C#中)的问题:

appdataDir = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)
Run Code Online (Sandbox Code Playgroud)

解决c:\windows\system32\inetsrv而不是C:\Users\MyUsername\AppData\Roaming.

更新:更确切地说,上面的C#代码返回一个空字符串,以便Path.GetFullPath(Path.Combine(appdataDir, "MyAppName"))将当前路径预先设置为我的应用程序名称,从而产生c:\windows\system32\inetsrv\MyAppName.

我知道我之前使用Windows Server 2008 R2上的相同Web应用程序完成了这项工作,现在我在Windows 7上
使用与IIS相同的主要版本7.5来解决此问题.我使用了与以前相同的过程:创建了一个新用户,以该用户身份登录以创建配置文件和APPDATA目录,然后添加具有此标识的应用程序池,最后将Web应用程序添加到此池中.

有任何想法吗?

iis application-pool appdata iis-7.5 applicationpoolidentity

11
推荐指数
3
解决办法
7833
查看次数

IIS如何确定ApplicationPoolIdentity帐户?

Windows Server 2008 R2 Standard ( Microsoft Windows Server Version 6.1 Build 7601: Service Pack 1 )

IIS 7.5.7600.16385

IIS Manager一个Site指定的ApplicationPoolIdentity= ApplicationPoolIdentity(默认设置),如何确定Windows帐户的网站使用的目录操作?

在以前的版本中IIS,Application PoolsNetwork Service帐户下运行.

什么是默认帐户ApplicationPoolIdentity

IIS Manager> Server Instance> Application Pools> Application Pool>右键单击Set Application Pool Defaults...-或-Advanced Settings

两者都调用相同的对话框,其中包含一个Identity带有...按钮的字段,该按钮允许设置标识 - 否在哪里指定与哪个帐户关联ApplicationPoolIdentity或允许设置该值

account application-pool iis-7.5 windows-server-2008-r2 applicationpoolidentity

10
推荐指数
2
解决办法
2万
查看次数

删除由 IIS ApplicationPoolIdentity 创建的 Windows 用户?

我在 Windows 10 中启动到我的用户配置文件时遇到问题,并且能够通过在此注册表项中将我的用户配置文件的 RefCount 设置为 0 来解决此问题:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\S-1-5-xxx

我有几个 ASP.NET MVC 和 ASP.NET Core 网站托管在 IIS(版本 10 而不是 IIS Express)中,我意识到在C:\Users这些网站中已经为它们创建了关联的 Windows 用户。

如果我错了,请纠正我我相信这些“Windows 用户”是ApplicationPoolIdentity在每个网站创建时创建的。

问题是这些“Windows 用户”也将注册表 RefCount 设置为 0,所以我认为这就是我无法启动到我的配置文件的原因。

现在我想删除这些“Windows 用户”,但是当我删除这些“Windows 用户”中的网站和应用程序池时inetmgrC:\Users.

问题是如何以正确的方式删除它们?

提前致谢。

asp.net iis asp.net-mvc applicationpoolidentity windows-10

9
推荐指数
1
解决办法
4185
查看次数

由于一系列故障,"DefaultAppPool"正在自动禁用

在这个问题上遇到困难.不确定我的ApplicationPoolIdentity如何被破坏.

目前我在Windows 8上使用Visual Studio 2012运行IIS 8.当尝试从Visual Studio调试应用程序,或者只是在浏览器中导航到该站点时,我收到以下错误并记录503错误.

Application pool 'DefaultAppPool' is being automatically disabled due to a series of failures in the process(es) serving that application pool.
Run Code Online (Sandbox Code Playgroud)

如果我查看应用程序错误日志,我会从User Profile Service中发现以下错误.

Windows cannot log you on because your profile cannot be loaded. Check that you are connected to the network, and that your network is functioning correctly. 

 DETAIL - The system cannot find the path specified.
Run Code Online (Sandbox Code Playgroud)

在查看详细信息后,我发现User Profile Service正在尝试使用Id加载配置文件

S-1-5-82-3006700770-424185619-1745488364-794895919-4004696415

现在我打开了注册表,尝试使用UserId查找配置文件.但是,"配置文件"列表中没有任何内容可以帮助您.

此处没有带ID的个人资料

因此,我发现这个问题可以解决

A)将应用程序池的加载用户配置文件设置为false.

B)为应用程序池使用不同的帐户.

C)修复帐户. …

application-pool user-profile applicationpoolidentity iis-8

8
推荐指数
1
解决办法
6583
查看次数

从ASP.NET应用程序池标识运行命令

当用户单击按钮时,我正在从ASP.NET应用程序运行可执行进程.此过程会创建多个文件,并将其提供给最终用户.我无法确切地看到进程是做什么或不做什么,但是直到我将admin用户指定为服务器上的应用程序池标识才行.我正在使用IIS7.

 using (var proc = new Process())
 {
    proc.StartInfo.FileName = Server.MapPath("~/Testing/Demo/MyExe.exe");
    proc.StartInfo.Arguments = String.Format("\"{0}\"", commandFilePath);
    proc.StartInfo.UseShellExecute = true;
    proc.Start();
    proc.WaitForExit();
 }
Run Code Online (Sandbox Code Playgroud)

我认为这通常是一件坏事.您能否让我深入了解为正常ApplicationPoolIdentity帐户启用此功能需要做些什么?

谢谢!

c# asp.net iis-7 application-pool applicationpoolidentity

7
推荐指数
1
解决办法
2827
查看次数