让 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="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)
活动目录设置
域服务帐户 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的主要内容,如果未能解决你的问题,请参考以下文章