问题标签 [applicationpoolidentity]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
asp.net-mvc-3 - IIS 7.5 上的用户 Domain\MachineName$ 使用 ApplicationPoolIdentity 登录失败
实际上,我期待SqlExcpetion
用户异常登录失败IIS AppPool\My AppPool Name
而不是Domain\MachineName$
.
我创建了一个正在使用的应用程序池
- 管理管道模式:集成
- 身份:ApplicationPoolIdentity
此 AppPool 分配给相关的 Web 应用程序 (MVC3)。但不知何故,WebApp 似乎以某种方式使用 NetworkService 连接到 SqlServer。
任何想法为什么或我应该改变什么?
windows - 应用程序池无法启动“无效身份”错误 1021
我已经用另一个用户而不是“网络服务”创建了一个应用程序池,但无法启动。在事件查看器中,我可以看到如下内容:
我错过了什么?
iis - 连接方式和应用程序池标识之间的区别
在 IIS 7.5 中,应用程序的基本设置下有一个“连接为”选项。这是什么?为什么要引入这个功能?它会覆盖应用程序池标识还是相反?
asp.net - 将 IIS 7.5 Web 窗体连接到 SQL Server 的最佳方法
我正在从以下位置升级 ASP.NET 4.0 应用程序:
Windows Server 2003 和 IIS 6
至:
Windows Server 2008 和 IIS 7.5
此应用程序基于ASP.NET Web 窗体而不是 MVC。我目前使用 SQL 身份验证,但我想在新环境中遵循最佳实践。
IIS 7.5 机器和 SQL Server 2008 机器都将驻留在具有自己的域控制器的 DMZ 中。如果我们可以在 Dev、Test 和 Prod 环境中使用类似的连接字符串,那就太好了。这种情况的最佳做法是什么?我已经阅读了三个选项。
- 应用程序池身份
- 在域上创建您自己的服务帐户
- SQL 身份验证
以下是讨论相关问题的问题的链接,但似乎没有任何问题可以回答我的具体问题。
iis - 由于权限不足,无法读取配置文件
在升级到 Windows Server 2008 环境之前,我正在尝试在本地计算机上的 IIS 实例上测试我的 Web 服务。当我尝试浏览服务时,我得到了这个。我创建了一个自定义应用程序池,该服务将在 btw 下运行。所以我猜测该应用程序 ID 没有访问该文件夹等的权限……顺便说一句,我得到了这个小细节……
“当读取 Web 服务器或 Web 应用程序的配置文件出现问题时,会发生此错误。在某些情况下,事件日志可能包含有关导致此错误的原因的更多信息。”
我想我需要授予该应用程序身份权限,但我不确定如何完成此操作。
还有另一种方法可以完成这项工作吗?
iis - IIS 7.5 应用程序池为自定义用户使用错误的 %APPDATA% 作为标识
我希望我的 MVC3 Web 应用程序能够访问 %APPDATA%(例如C:\Users\MyUsername\AppData\Roaming
在 Windows 7 上),因为我在那里存储了配置文件。因此,我在 IIS 中使用用户“MyUsername”的身份创建了一个应用程序池,通过使用该帐户登录创建了该用户的配置文件,并打开了“加载用户配置文件”选项(默认情况下为 true)。模拟已关闭。
现在我遇到了 %APPDATA% (在 C# 中)的问题:
解析为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 上使用相同的主要版本 7.5 的 IIS 遇到了这个问题。
我使用了与以前相同的过程:创建了一个新用户,以该用户身份登录以创建配置文件和 APPDATA 目录,然后添加具有此身份的应用程序池,最后将 Web 应用程序添加到此池中。
有任何想法吗?
asp.net - 使用应用程序池标识的 IIS 应用程序丢失主令牌?
(这是一个关于模糊问题的问题。我尝试提供所有相关数据,希望有人提供有用的信息;对于冗长的描述表示歉意。)
我们的网络应用程序
我们有一个在 IIS 7.5 中运行的 .NET 4 Web 应用程序,它访问 Active Directory 和一个 SQL Server 数据库。
通过将应用程序池的标识设置为ApplicationPoolIdentity ,此 Web 应用程序在虚拟“应用程序池标识”下运行。虚拟身份的简明描述可以在StackOverflow 答案和它所引用的博客文章中找到:应用程序池身份只是一个附加组,它添加到作为“网络服务”运行的 Web 应用程序的工作进程中。然而,一位消息人士含糊地暗示“网络服务和 ApplicationPoolIdentity 确实存在 IIS.net 站点文档未发布的差异”。因此,虚拟身份可能不仅仅是一个附加组。
我们选择使用 ApplicationPoolIdentity,而不是 NetworkService,因为它成为 IIS 7.5 中的默认设置(参见,例如,此处),并且根据 Microsoft 的建议:“此身份允许管理员指定仅与应用程序所在身份相关的权限池正在运行,从而提高了服务器的安全性。” (来自为 applicationPools [IIS 7 Settings Schema] 添加的 processModel 元素)“应用程序池标识是一种强大的新隔离功能”,它“使运行的 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 放在 Negotiate 之前,那么它会再次起作用。(请注意,Kerberos 需要访问 AD,但 NTLM 不需要。)IIS.net 线程“Window Authentication Failing with AppPool Identity”中报告了类似的问题。
我们的假设和解决方法
至少在将应用程序池从 ApplicationPoolIdentity 切换到 NetworkService 时,AD 和登录问题似乎总是消失了。(我们发现一份报告证实了这一点。)
页面“对 ASP 页面上的身份验证问题进行故障排除”有一些与主令牌和辅助令牌相关的建议,我发现令人鼓舞的是它链接了我们的前两个错误:它提到了NT AUTHORITY\ANONYMOUS LOGON
访问和 AD 错误 0x8000500C 和“指定的目录服务”属性或值不存在”。
(同一页还提到了 ADSI 模式缓存问题,但我们可以找到的关于该主题的所有内容都是旧的。现在我们认为这无关紧要。)
基于上述,我们目前的工作假设是,只有在虚拟应用程序池身份下运行时,我们的 Web 应用程序(IIS?工作进程?)才会突然失去其主令牌,因此 IIS 只有一个辅助令牌,所以所有对 Active Directory 和 SQL Server 的访问是匿名完成的,导致上述所有错误。
现在我们打算从 ApplicationPoolIdentity 切换到 NetworkService。希望这可以消除上述所有问题。但我们不确定;如果可能的话,我们想换回去。
我们的问题
上述假设是否正确,如果正确,这是 IIS/Windows/.NET 中的错误吗?在什么情况下会发生这种主要的令牌丢失?
asp.net - WindowsIdentity.GetCurrent() 与 Request.LogonUserIdentity?
我试图了解在这里分配权限之间的区别:
对比
通过模拟分配:
1)听说模拟是用来访问资源而不是运行exe进程
我试图运行一个只模拟我的用户的 EXE 进程,但没有成功。
后来我将用户设置为应用程序池标识 - (这里的第一张图片)然后我能够运行 exe 文件。
这两者之间的工作区别是什么?
如果我只设置应用程序池身份(而不是模拟) - 它是否能够访问具有特殊权限的外部资源?
c# - 以编程方式获取应用程序池标识
如何在 C# 中以编程方式获取 appPool 的标识?我想要应用程序池用户而不是当前登录的用户。
x509certificate2 - 即使授予 MMC 权限,STS 密钥集也不存在
我的应用程序即时创建虚拟目录以及在这些虚拟目录中运行的启用 STS 的 Web 应用程序的应用程序池。应用程序池在 ApplicationPoolIdentity 帐户 (IIS APPPOOL\MyAppPool) 下运行。而且我一直在尝试找出以编程方式授予对已安装证书的访问权限的方法。
我的第一种方法是使用批处理文件执行 WinHttpCertCfg。但是,此方法仅适用于已“激活”的应用程序池帐户。通过“激活”,我的意思是我至少浏览过一次新应用程序。直到发生这种情况 - WinHttpCertCfg 总是返回消息“句柄无效”。
我尝试的下一个方法是基于从这里获得的解决方案。此解决方案的工作原理是,当我在 MMC 中浏览证书并选择“管理证书密钥”时,会列出应用程序池帐户。即使我运行 WinHttpCertCfg 来列出具有访问权限的帐户 - 也会列出新的应用程序池。
但毕竟......当我浏览 Web 应用程序时,我仍然得到“keyset 不存在”。
我现在的重点是修复第二种方法。这是我对原始代码的修改