让 IIS 在 Intranet 环境中模拟 Windows 用户到 SQL Server

Posted

技术标签:

【中文标题】让 IIS 在 Intranet 环境中模拟 Windows 用户到 SQL Server【英文标题】:Getting IIS to impersonate the windows user to SQL server in an intranet environment 【发布时间】:2014-02-19 20:23:53 【问题描述】:

我正在使用 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)

活动目录设置

域服务帐户 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”。

任何人都可以就我可能出错的地方提供指导吗?

【问题讨论】:

这是负载均衡的环境吗? 不,不是(据我所知!) 你看过这个 SO ***.com/questions/4618552/… 和这个:***.com/questions/13706580/… 他们非常彻底地涵盖了这个主题。 TimG 感谢我在搜索中错过了这些帖子。他们有几个选择让我在早上尝试! 优秀的文档 - 这是我们的问题:Managed Pipeline = Integrated 【参考方案1】:

对于将来访问此问题的任何人。我通过重新启动 IIS 服务解决了这个问题……doh!看来我的设置很好,只需要完全重启服务!

【讨论】:

@DanielDolz 据我了解,访问该站点的用户也可以直接访问 SQL Server

以上是关于让 IIS 在 Intranet 环境中模拟 Windows 用户到 SQL Server的主要内容,如果未能解决你的问题,请参考以下文章

从 Intranet 链接到内部网络位置

使用集成管道模拟域用户

如何为 Intranet 预编译 MVC?

IIS新建项目

IIS 上 asp.net mvc Intranet Web 应用程序的基本身份验证与 Windows 身份验证

Web 应用程序的 IIS7 文件夹权限