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

2024-02-10

(这是一个关于模糊问题的问题。我尝试提供所有相关数据,希望有人能提供有用的信息;对冗长的描述表示歉意。)

我们的网络应用程序

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

此 Web 应用程序在虚拟“应用程序池身份”下运行,通过将应用程序的应用程序池的身份设置为应用程序池身份 http://msdn.microsoft.com/en-us/library/bb386459.aspx。虚拟身份的简明描述可以在StackOverflow 的答案 https://stackoverflow.com/a/3680803,以及它所引用的博客文章:应用程序池标识只是添加到作为“网络服务”运行的 Web 应用程序的工作进程中的附加组。然而,一个来源 http://forums.iis.net/p/1171701/1957045.aspx#1957045含糊地暗示“网络服务和 ApplicationPoolIdentity 确实存在 IIS.net 站点文档未发布的差异”。因此,虚拟身份可能不仅仅是一个额外的群体。

我们选择使用 ApplicationPoolIdentity,而不是 NetworkService,因为它成为 IIS 7.5 中的默认设置(例如,请参阅here http://msdn.microsoft.com/en-us/library/bb386459.aspx#attributesAndElementsToggle),并根据 Microsoft 的建议:“此身份允许管理员指定仅与应用程序池运行所在的身份相关的权限,从而提高服务器安全性。” (从用于为 applicationPools 添加的 processModel 元素 [IIS 7 设置架构] http://msdn.microsoft.com/en-us/library/bb386459.aspx#attributesAndElementsToggle)“应用程序池身份是一项强大的新隔离功能”,它“使运行的 IIS 应用程序更加安全可靠。”(来自IIS.net 文章“应用程序池标识” http://learn.iis.net/page.aspx/624/application-pool-identities/)

该应用程序使用集成 Windows 身份验证,但使用<identity impersonate="false"/> http://msdn.microsoft.com/en-us/library/72wdk8cc.aspx,这样就不会使用最终用户的身份,而是使用虚拟应用程序池身份来运行我们的代码。

此应用程序使用以下方式查询 Active Directory系统目录服务 http://msdn.microsoft.com/en-us/library/system.directoryservices.aspx类,即 ADSI API。在大多数地方,这是在不指定额外的用户名/密码或其他凭据的情况下完成的。

该应用程序还使用以下方式连接到 SQL Server 数据库Integrated Security=true在连接字符串中。如果数据库是本地的,那么我们会看到IIS APPPOOL\OurAppPoolName用于连接数据库;如果数据库是远程的,则机器帐户OURDOMAIN\ourwebserver$用来。

我们的问题

我们经常遇到工作安装因以下方式之一开始失败的问题。

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

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

  • 从 Internet Explorer 登录应用程序开始失败,并出现 HTTP 401 错误。但如果在 IIS 中我们将 NTLM 放在 Negotiate 之前,那么它会再次起作用。 (请注意,Kerberos 需要访问 AD,但 NTLM 不需要。)在IIS.net 线程“Windows 身份验证因 AppPool Identity 失败” http://forums.iis.net/t/1171701.aspx.

我们的假设和解决方法

至少,当将应用程序池从 ApplicationPoolIdentity 切换到 NetworkService 时,AD 和登录问题似乎总是消失。 (我们发现一份报告 http://forums.iis.net/p/1181039/2010748.aspx#2010748证实了这一点。)

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

(同一页面还提到了 ADSI 架构缓存问题,但我们在该主题上找到的所有内容都是旧的。目前我们认为这是不相关的。)

综上所述,我们目前的工作假设就是,仅当在虚拟应用程序池身份下运行时,我们的 Web 应用程序(IIS?工作进程?)突然丢失了其主令牌,这样IIS只有一个辅助令牌,这样所有对Active Directory和SQL Server的访问都是匿名完成的,从而导致上述所有错误。

现在我们打算从 ApplicationPoolIdentity 切换到 NetworkService。希望这能让上述所有问题消失。但我们不确定;如果可能的话我们想切换回来。

我们的问题

上述假设是否正确?如果正确,这是 IIS/Windows/.NET 中的错误吗?在什么情况下会发生这种主要代币损失?


通过 Microsoft 支持,我发现我们遇到了中描述的问题Microsoft 知识库文章 KB2545850 http://support.microsoft.com/kb/2545850。仅当使用 ApplicationPoolIdentity 时才会发生这种情况。它很容易发生,即在更改计算机帐户密码后(默认情况下每 30 天自动发生一次),然后重新启动 IIS(例如,通过iisreset)。请注意,根据 Microsoft 和我们的观察,重新启动后问题就会消失。

根据 Microsoft 的说法,无法检查您的 Windows/IIS 是否已进入此状态。

Microsoft 在此知识库文章中附加了一个修补程序。没有迹象表明该修补程序何时会正式交付,而且该修补程序已经存在 10 个月了。在我们的具体案例中,我们决定改用 NetworkService。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • ASP.NET MailMessage.BodyEncoding 和 MailMessage.SubjectEncoding 默认值

    很简单的问题 但我在 MSDN 上找不到答案 查找 ASP NET 将用于的默认值 MailMessage BodyEncoding and MailMessage SubjectEncoding 如果你不在代码中设置它们 Thanks F
  • Global.asax PostAuthenticateRequest 事件绑定是如何发生的?

    我怎样才能使用发布验证请求Global asax 事件 我正在跟进本教程 http www asp net security tutorials forms authentication configuration and advanced
  • 跨多个域的 ASP.NET 会话

    是否有合适的 NET 解决方案来在多个域上提供持久服务器会话 即 如果该网站的用户在 www site1 com 下登录 他们也将在 www site2 com 下登录 安全是我们正在开发的程序的一个问题 Thanks 它是否需要在会话中
  • Angular2 与 ASP.NET 5 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在将 Angular2 与 ASP NET5 gulp 和 typescript 结合使用 当我解决
  • idleTimeout 和 ShutdownTimeout 之间的区别

    我正在尝试放宽网站的会话过期策略 以便用户可以指定会话超时间隔 我需要弄清楚应该指定哪些网站相关设置 以免过多限制用户 例如 可能需要 1 天的间隔 我将使用门票来实现这一点 现在 我知道我可以在网站的 web config 文件中指定id
  • 如何禁用/覆盖内容页面控件 ID 的命名容器 ID 生成

    我们有一个现有的 ASP Net Web 应用程序 我们希望使用母版页将其转换为该应用程序 在执行此操作的过程中 我发现为 HTML 元素生成的 HTML id 以 ContentPlaceHolder 的 id 为前缀 这就是当我们设置
  • 必填字段验证器在下拉列表回发时消失

    我在 asp net 中填充两个下拉列表 两者都分配给必填字段验证器 隐藏代码如下 if Page IsPostBack DataTable dt new DataTable dt Columns Add emp dt Columns Ad
  • 如何使用 Blazor 在 ASP.NET CORE 中更新数据库后刷新网页

    我正在制作一个小型房间预订网络应用程序 我希望在给定的时间间隔内刷新网页 即给定的一分钟或对数据库进行更改时 我发现StateHasChanged 但我真的不知道如何实现它 这里是新手一克诺比 我尝试将其放在将约会添加到日程表的函数中 va
  • OWIN 可以替代 ASP.NET MVC 应用程序中的 DI 吗?

    大约一年前 在 Visual Studio 中创建时自动生成的 MVC 项目不包含任何有关 OWIN 的内容 作为再次申请并试图了解这些变化的人 我想知道 OWIN 是否可以替代我的 DI 据我了解 Startup Auth cs 中的以下
  • 当checked属性为false时,单选按钮默认被选中?

    我正在尝试生成单选按钮 有条件地检查检查的属性 如果该值存在于数据库中 则应选择它 否则检查的属性为 false 所以最初数据库中没有行 所有单选按钮的检查属性也为 false 但仍然在 UI 上选择 请参见下图 所以不知道这是默认行为还是
  • 当路径长度超过 260 个字符时 System.IO.DirectoryNotFoundException [重复]

    这个问题在这里已经有答案了 我有 ASP NET Core MVC 项目 针对 NET 4 62 我正在尝试保存文件 当路径长度低于 260 或 248 我不确定 时 一切正常 但是当路径长度更长时 我会得到一个System IO Dire
  • ASP.Net 应用程序中的音频/视频/文本聊天

    我需要在 ASP Net 中开发一个聊天系统 我已经浏览了很多关于类似主题的问题 但没有找到任何一个令人满意的 是否可以从头开始创建它 或者我是否需要使用一些 API 我的要求仅限于我的网站用户 可以说基于内联网 请帮我 要进行文字聊天 人
  • Web 表单中的 IRouteHandler:路由需要 HttpContext.User 的请求

    我正在尝试向 Asp Net Web Forms 应用程序添加一个非常基本的路由 在 IIS 7 下运行 集成模式 http mydomain com foo http mydomain com foo 我想显示动态页面的结果 http m
  • 如何为动态创建的按钮创建 onClick 事件处理程序

    目前 我正在为学生宿舍做一个项目 现在我必须实现一些关于学生的搜索策略 这里 当用户单击 aspx 页面中的另一个服务器按钮时 我必须动态创建一个按钮 因此我必须创建新创建的按钮的 onclick 事件处理程序 我使用的代码片段是 prot
  • 检测到 NuGet 包的版本冲突

    我正在开发 ASP Net core 2 1 Web 应用程序项目 我的解决方案中有 1 个项目和 3 个其他库 它是高级架构 数据访问层 DAL 业务层 BL 公共层 CL 所以我需要添加引用来连接一些库和项目 我已经添加了CL参考我的项
  • 从 Orchard 内的主题渲染图像

    我刚刚选择 Orchard 来构建我的博客 作为创建这个新博客的努力的一部分 我正在创建一个自定义主题 这个自定义主题同时具有 CSS 和图像 我的问题 我的问题基本上可以归结为 如何渲染属于主题一部分的图像 到目前为止我已经尝试过的 我尝
  • 使用 JQuery 根据下拉列表选择的值显示/隐藏控件

    我正在尝试使用 JQuery 根据下拉菜单的选定索引显示 隐藏 div 标签 但它不起作用 任何帮助将不胜感激 Thanks
  • 正则表达式最多匹配五个单词

    我有一个正则表达式 a zA Z 0 9 1 5 它验证该单词包含字母数字字符和少数特殊字符 并且长度不应超过5人物 如何使此正则表达式接受最多五个与上述正则表达式匹配的单词 a zA Z 0 9 1 5 s a zA Z 0 9 1 5
  • 使用 DependencyResolver 通过 MVC 3 进行控制器实例化时出错

    我正在使用 MVC 3 并在应用程序启动时使用以下代码 UnityContainer container new UnityContainer new UnityMappings container DependencyResolver S
  • 防止exe文件上传到网站

    有人可以告诉我如何防止 exe 文件在网站上上传 即使 exe 文件位于 zip 文件内 新文件夹中的 exe 文件 然后压缩并上传新文件夹 允许用户上传文件 如果是 ZIP 并通过解压存档并评估其内容来进行服务器端检查

随机推荐

  • 以“主从”方式将 DataGridView 绑定到实体

    我正在尝试在两个 DataGridView 之间建立主从关系 我有一个 EntityModel 其中有两个实体通过 ClientCommissions 关联连接 它们是从现有数据库生成的 并且具有运行良好的导航属性 证明 使用提到的 Ent
  • 使用 TinyMCE 突出显示文本

    目前我有一个使用 TinyMCE 的文本区域 http fiddle tinymce com D2gaab http fiddle tinymce com D2gaab 我想突出显示左大括号 右大括号之间的文本 有人知道这是否可能 以及我该
  • 在 CSS 中使用非常具体的选择器有优势吗?

    我知道在 jQuery 中 使用选择器时更具体是有利的 这样 jQuery 就不必遍历整个 DOM 来找到您要查找的内容 例如 span description 比仅仅更好 description 如果我知道description类仅适用于
  • Pandas - 基于列对行进行分组,并用非空值替换 NaN

    我正在尝试基于目标 group by 列 在数据帧上使用字符串创建一些聚合 假设我有以下包含 4 列的数据框 我想根据列 Col1 对所有行进行分组 在这种情况下 o NaN 组的值不为空 期望的输出是这样的 我也尝试使用普通的 impor
  • 从计算着色器中的 RWTexture2D 加载

    据我所知 HLSL 着色器模型 5 0 存在一个限制 即无法从非标量类型的 RWTexture2D 资源加载数据 也就是说 以下行为是非法的 RWTexture2D
  • 与XBoard(国际象棋引擎)通信(C++/C)

    我只是在尝试制作一个基本的国际象棋引擎 我从中得到了很多建议http web archive org web 20070704121716 http www brucemo com compchess programming alphabe
  • 防止在 ASP.NET 输入字段中按 Enter 进行回发

    我在 javascript 和 asp net 中的 Enter 键有问题 我有一个像这样的控件 带有一个 textchanged 事件 它会进行查找 但我想在用户输入时控制它
  • 从 Base 向下转换为 Derive Segmentation 错误

    我正在学习动态转换并搜索了很多网站 我得出的结论是动态转换可以从基础转换为派生并派生到基础 但是 当我从 Base 进行强制转换以派生时 它会出现分段错误 这是代码 我期望从 A 中得到一个 但即使在铸造之后它也给了我一个 D class
  • 如何使用Dojo动态添加div?

    我有以下静态 div div div 我想使用 dojo 在 div1 中动态添加一个 id 为 div1 1 的 div 我该怎么做 您可以仅使用 Dojo Base 来完成此操作 如果您使用 trunk 或 Dojo 1 3 则无需包含
  • Android 深度链接到应用程序

    我正在尝试创建一个可以通过电子邮件发送的链接 当在安装了我的应用程序的 Android 设备上打开该链接时 该链接将自动打开我的应用程序中的正确页面 我已经通过几种不同的方式部分地解决了这个问题 但发现了一些问题 我想知道是否有人有解决方案
  • pagehide 和 pageshow 事件在 ios chrome 上无法按预期工作

    Apple 文档在此处列出了可用的 iOS 浏览器事件 https developer apple com library archive documentation AppleApplications Reference SafariWe
  • 在哪里可以找到以前版本的 Azure Service Fabric SDK?

    我需要找到 Azure Service Fabric SDK 的较旧 SDK 版本 准确地说是 2 1 163 它不再在 Web Platform Installer 上可用 并且在其他地方也找不到它 有人可以指点我吗 非常感谢 这些是链接
  • “调用布尔值的成员函数 fetch_assoc()”[重复]

    这个问题在这里已经有答案了 我看到了很多关于此错误的问题 但似乎没有一个答案可以解决我的问题 抱歉 如果我错过了一个 我的脚本一直给我一个错误提示 调用布尔值的成员函数 fetch assoc 但我不明白这是怎么回事 Both mysqli
  • jQuery 问题 - 未捕获的类型错误:无法读取未定义的属性“浏览器”

    我正在尝试向网站添加滑块 当我在本地测试时 它在标准 html 文件中工作正常 但是当我尝试将其传输到 WordPress 网站时 我不断收到此错误 未捕获的类型错误 无法读取未定义的属性 浏览器 它指向问题代码中的第 11 行 isIE
  • libjpeg 版本6b jpeg_stdio_src 与 jpeg_mem_src

    我正在使用 Libjpeg 版本 6b 在版本 8 中 他们有一个很好的函数 可以从内存中读取数据 称为jpeg mem src 不幸的是版本 6b没有这个功能 我可以使用什么来直接从内存读取压缩数据 我所看到的只是jpeg stdio s
  • 如何在 yii2 的插入验证器上使用必需的?

    任何人都可以对如何使用提出建议 on gt insert 验证在yii2 我用过 array field name required on gt insert in Yii1 but in yii2它不会检查我是否设置 field name
  • 如何根据 frontmatter 对 GraphQL 查询进行排序

    我是新来的GraphQL并已成功对数据进行排序allMarkDownRemark查询 但是我需要的是能够为我们提供allFile查询 然后仍然按frontmatter 这可能吗 这是返回正确数据的查询 删除排序 allFile limit
  • Javascript 在页面加载时预先选择文本区域

    我有一个带有文本区域的页面 当加载页面时 我想预先选择文本区域 就像 twitter com 一样 这样用户就不必单击它 你知道怎么做吗 以前谢谢 罗德里戈 阿尔维斯 维埃拉 document ready function text are
  • TSQL alter table 添加级联删除和更新约束

    我正在尝试在 tsql 中创建更新和删除约束 我尝试了几种不同的方法 现在我有点困惑和沮丧 看起来很简单 我知道你无法改变现有的约束 所以我不确定如何做到这一点 alter table AllowedCars add constraint
  • 使用应用程序池标识的 IIS 应用程序丢失主令牌?

    这是一个关于模糊问题的问题 我尝试提供所有相关数据 希望有人能提供有用的信息 对冗长的描述表示歉意 我们的网络应用程序 我们有一个在 IIS 7 5 中运行的 NET 4 Web 应用程序 用于访问 Active Directory 和 S