我正在使用C#和ASP.NET MVC开发一个Intranet站点。我在一台机器上安装了SQL Server,而在另一台机器上运行IIS。我希望用户访问Intranet站点,而不提示用户Internet Explorer将用户Windows凭据发送到IIS,然后将这些凭据传递给sql server,这意味着sql server可以看到用户访问数据库。
我知道Kerberos双跳问题,我正试图绕过它。目前我可以让IE将Windows凭据传递给IIS并进行身份验证。我只是无法让IIS将这些凭据传递给SQL Server,而是当前在应用程序池标识下运行请求,该标识设置为域服务帐户“htu \ srv-htu-iis”。
我的设置如下:
的Web.Config
<system.web>
<authentication mode="Windows" />
<authorization>
<deny users="?" />
</authorization>
<identity impersonate="true" />
</system.web>
<system.webServer>
<validation validateIntegratedModeConfiguration="false" />
</system.webServer>
连接字符串
connection string="data source=hturesbsqlp01;initial catalog=R2_Dev;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework""
IIS身份验证设置
Anonymous Authentication = Disabled
ASP.NET Impersonation = Enabled
Forms Authentication = Disabled
Windows Authentication = Enabled
IIS应用程序池设置
Managed Pipeline = Integrated
Identity = htu\srv-htu-iis (domain service account)
Active Directory设置
域服务帐户htu \ srv-htu-iis已设置服务主体名称,该名称将我们的网站与帐户相关联。
活动目录
Allow Delagation to any service
SQL Server在其自己的SQL域服务帐户下运行。
测试
我运行了以下代码测试:
System.Web.HttpContext.Current.User.Identity.Name
这正确地返回访问该站点的用户的Windows凭据
System.Security.Principal.WindowsIdentity.GetCurrent().Name
返回域服务帐户“htu \ srv-htu-iis”,这是运行应用程序池标识的内容。
任何人都可以提供我可能出错的方向吗?
答案 0 :(得分:14)
将来访问此问题的任何人都可以。我通过重新启动IIS服务解决了这个问题... doh!似乎我的设置很好,只需要完全重启服务!