Kerberos双跳在ASP.NET 4.0和SQL2008R2中

我有一个ASP.NET 4.0应用程序,我需要将身份validation转发到数据库。 为了这个请求的帮助,让我们调用Web服务器“app1”和数据库服务器“sql1”。

SQL2008R2数据库服务作为自定义域帐户“SqlServer”下的命名实例“SQL2008R2”运行。 该服务器正在运行Windows Server 2008 R2企业版。 我为此创build了一个SPN …

setspn -a MSSQLSvc/sql1.mydomain.local:SQL2008R2 SqlServer 

ASP.NET应用程序在集成pipe道模式下使用自定义域帐户“WebApplicationUser”在应用程序池下运行。 它目前运行在运行Windows 7 Enterprise的笔记本电脑上,但最终将托pipe在Windows Server 2008 R2标准版上。 我已经为应用程序创build了2个SPN(在我正在运行的Windows 7机器上)…

 setspn -a http/app1 WebApplicationUser setspn -a http/app1.mydomain.local WebApplicationUser 

在Active Directory用户和计算机中,我select了“WebApplicationUser”帐户,并使用任何协议(我也尝试使用Kerbero)启用了“MSSQLSvc / sql1.mydomain.local:SQL2008R2”的约束委派。

该应用程序在IIS 7.5中设置,并且设置为禁用匿名,基本,摘要和表单,同时启用“ASP.NET模拟”和“Windows”。 Windows身份validation已closures“扩展保护”并启用“内核模式身份validation”。 提供商是按照“协商”和“NTLM”的顺序。

ASP.NET应用程序使用EF,并将连接stringconfiguration为使用集成安全性。

 <connectionStrings> <add name="MyContext" connectionString="metadata=res://*/Data.MyModel.csdl|res://*/Data.MyModel.ssdl|res://*/Data.MyModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=sql1.mydomain.local\sql2008r2;Initial Catalog=MyDatabase;Persist Security Info=false;Integrated Security=True;MultipleActiveResultSets=True&quot;" providerName="System.Data.EntityClient" /> </connectionStrings> 

我的networkingconfiguration既指定Windows身份validation和模拟,因为我使用asynchronous页面,我也已启用inpersonation策略stream动…

 <runtime> <alwaysFlowImpersonationPolicy enabled="true" /> </runtime> <system.web> <authentication mode="Windows" /> <identity impersonate="true" /> </system.web> 

如果我本地login(在“web1”上)并浏览到应用程序(使用IE),这一切工作 – 但这不涉及我想解决的双跳。

如果我login到另一台机器,然后使用IE浏览到应用程序,或者我使用FireFox从本地机器浏览,这是行不通的 – 注意:FireFox会提示我inputlogin信息。 与数据库的连接失败,“用户login失败”NT AUTHORITY \ ANONYMOUS LOGON“

不像大量的文章(这里可能是问题的一部分),我没有使用任何自定义代码来模拟用户。 我的理解是,模拟将通过上面的web.config设置全面应用于应用程序。 我所做的只是打开连接,然后在完成时closures它。

我显然错过了一两步,但是看了所有我能find的文档(还有很多),但我仍然无法find那一步。 我能find的99%的文档实际上与IIS6和Windows 2003相关,但是这些原则应该保持不变。

有没有人能够在Windows 7和/或Windows Server 2008上运行这样的configuration?

在为SQL server配置SPN时,我们发现需要包含SQL server侦听的端口(1433)。

您应该下载并使用Brian Booth的DelegConfig v2工具来帮助您设置正确的配置设置。 http://blogs.iis.net/brian-murphy-booth/archive/2009/04/22/delegconfig-v2-beta.aspx

在整个过程中,它将基本上保持你的手。 我们发现这个工具是无价的。