【发布时间】: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 stackoverflow.com/questions/4618552/… 和这个:stackoverflow.com/questions/13706580/… 他们非常彻底地涵盖了这个主题。
-
TimG 感谢我在搜索中错过了这些帖子。他们有几个选择让我在早上尝试!
-
优秀的文档 - 这是我们的问题:Managed Pipeline = Integrated
标签: sql-server asp.net-mvc authentication iis kerberos