让IIS在Intranet环境中模拟Windows用户到SQL服务器

时间:2014-02-19 20:23:54

标签: sql-server asp.net-mvc authentication iis kerberos

我正在使用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=&quot;data source=hturesbsqlp01;initial catalog=R2_Dev;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&quot;"

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”,这是运行应用程序池标识的内容。

任何人都可以提供我可能出错的方向吗?

1 个答案:

答案 0 :(得分:14)

将来访问此问题的任何人都可以。我通过重新启动IIS服务解决了这个问题... doh!似乎我的设置很好,只需要完全重启服务!