Tag: adsi

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

(这是关于一个模糊问题的问题,我试图提供所有相关数据,希望有人有帮助的信息;对长描述道歉。 我们的networking应用 我们有一个运行在IIS 7.5中的.NET 4 Web应用程序访问Active Directory和一个SQL Server数据库。 通过将应用程序的应用程序池的标识设置为ApplicationPoolIdentity ,该Web应用程序在虚拟“应用程序池标识”下运行。 关于虚拟身份的简要描述可以在StackOverflow的答案和它引用的博客文章中find:应用程序池身份只是一个附加组,它被添加到作为“networking服务”运行的Web应用程序的工作进程中。 然而,有一个消息来源隐约暗示,“networking服务和ApplicationPoolIdentity确实存在IIS.net站点文档不公开的区别”。 所以虚拟身份可能不仅仅是一个额外的团体。 我们select使用ApplicationPoolIdentity而不是NetworkService,因为它已经成为IIS 7.5中的默认设置(参见这里 ),并且按照微软的build议:“这个标识允许pipe理员指定仅与应用程序的身份相关的权限池正在运行,从而增加了服务器的安全性。“ (来自processModel元素,用于为applicationPools添加[IIS 7设置架构] )“应用程序池标识是一个强大的新隔离特性”,它使“运行IIS应用程序更加安全可靠”(来自IIS.net文章“Application Pool Identities” ) 该应用程序使用集成Windows身份validation,但使用<identity impersonate="false"/> ,以便不使用最终用户身份,而使用虚拟应用程序池标识来运行我们的代码。 此应用程序使用System.DirectoryServices类(即ADSI API)查询Active Directory。 在大多数地方,这是在没有指定额外的用户名/密码或其他凭据的情况下完成 此应用程序还使用连接string中的Integrated Security=true连接到SQL Server数据库。 如果数据库是本地的,那么我们看到IIS APPPOOL\OurAppPoolName用于连接到数据库; 如果数据库是远程的,那么使用机器帐户OURDOMAIN\ourwebserver$ 。 我们的问题 我们经常遇到下列其中一种情况,即安装工作开始失败的问题。 当数据库在远程系统上时,数据库连接开始失败:“NT AUTHORITY \ ANONYMOUS LOGON用户login失败”原因:基于令牌的服务器访问validation失败,出现基础结构错误,请检查以前的错误。 以前的错误是“错误:18456,严重性:14,状态:11。 所以现在看来OURDOMAIN\ourwebserver$不再被使用,而是尝试匿名访问。 (我们有轶事证据表明,这个问题是在UACclosures的时候发生的,而且在UAC打开后就消失了,但是请注意,更改UAC需要重新启动……) IIS.net线程中报告了类似的问题“use ApplicationPoolIdentity连接到SQL“ ,具体在一个答复 。 通过ADSI(System.DirectoryServices)的Active Directory操作开始失败,错误为0x8000500C(“未知错误”),0x80072020(“发生操作错误”)或0x200B(“指定的目录服务属性或值不存在”) 。 从Internet Explorerlogin到应用程序开始失败,并出现HTTP […]