我有一个在Windows Intranet环境中运行的ASP.net应用程序。我需要以当前登录的用户执行某些数据库更新。
IIS /服务器信息:
var windowsIdentity = User.Identity as WindowsIdentity;
WindowsIdentity.RunImpersonated(windowsIdentity.AccessToken, () =>
{
// perform database update
});
这引发异常-(默认应用程序池标识),则模拟将正常工作。为什么这种模拟对System.Data.SqlClient.SqlException: Login failed for user 'NT AUTHORITY\ANONYMOUS LOGON'
如果我将应用程序池标识更改为使用
AppPoolIdentity
AppPoolIdentity
起作用,但对我的domain service account不起作用?在与您类似的情况下对我有用的方法是打开IIS,转到您的站点,单击“配置编辑器”图标。在顶部的两个标题中,首先单击“从”下拉列表,然后选择“ ApplicationHost.config”,然后在“从”左侧的“部分”标题中,单击下拉列表,然后展开文件夹:
system.WebServer->安全性->身份验证-> windowsAuthentication,
根据情况,您可以选择“ useAppPoolCredentials”并将其设置为TRUE。
当您将“ useAppPoolCredentials”设置为true时,您正在告诉IIS它需要使用其应用程序池标识,您将其定义为域服务帐户以对返回的授权票证进行解密。用户个人资料通常没有相关规定。
如果不起作用,另一种尝试的方法是在应用程序池的高级设置中切换“加载用户个人资料”设置,我不确定是对还是错可以解决您的问题,但似乎可以之前帮助解决类似问题。我会先尝试上面的方法,如果那不起作用,请尝试以下方法:
我没有看到任何有关SPN的内容,您使用的是这些吗?当运行域帐户作为应用程序池ID时,可能需要使用它们。下面的文章记录了该步骤以及使它起作用的其他步骤:
此外,这里有很多文章对我的工作起到了很大的帮助作用。
希望这会有所帮助。