ASP.NET 4.0中的Kerberos双跳& SQL2008R2

时间:2012-12-04 15:44:22

标签: asp.net sql-server windows iis-7.5 kerberos

我有一个ASP.NET 4.0应用程序,我需要在其中将身份验证转发到数据库。 出于此请求帮助的目的,我们可以调用Web服务器“app1”和数据库服务器“sql1”。

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

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

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

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

在Active Directory用户和计算机中,我选择了“WebApplicationUser”帐户,并且已使用任何协议启用约束委派为“MSSQLSvc / sql1.mydomain.local:SQL2008R2”(我还尝试过仅使用Kerbero)。 / p>

应用程序在IIS 7.5中设置,并且身份验证设置为禁用Anonymouse,Basic,Digest和Forms,同时启用“ASP.NET Impersonation”和“Windows”。 Windows身份验证已关闭“扩展保护”并启用“内核模式身份验证”。提供者按顺序是“谈判”和“NTLM”。

ASP.NET应用程序使用EF,连接字符串配置为使用集成安全性...

<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>

我的网络配置指定了Windows身份验证和模拟,因为我使用异步页面,我还启用了inpersonation策略流程...

<runtime>
    <alwaysFlowImpersonationPolicy enabled="true" />
</runtime>

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

如果我在本地登录(在“web1”上)并浏览到应用程序(使用IE),这一切都有效 - 但这不涉及我试图解决的双跳。

如果我登录到另一台计算机然后使用IE浏览到该应用程序,或者我使用FireFox从本地计算机浏览,则不起作用 - 注意:FireFox会提示我输入登录详细信息。与数据库的连接失败,“用户登录失败'NT AUTHORITY \ ANONYMOUS LOGON'”

与许多文章不同(这里可能是问题的一部分),我没有使用任何自定义代码来模仿用户。据我所知,模拟将通过上面的web.config设置全面应用于应用程序。我所做的就是打开连接,然后在完成连接后再次关闭它。

我显然错过了一步(或两步),但看了我能找到的所有文档(并且已经有很多),我仍然找不到那一步。我能找到的99%的文档实际上与IIS6和Windows 2003有关,但原则应该保持不变,这无济于事。

是否有人因为在Windows 7和/或Windows Server 2008上运行这样的配置而被取代?

2 个答案:

答案 0 :(得分:7)

答案 1 :(得分:6)

为SQL Server配置SPN时,我们发现需要包含SQL Server侦听的PORT(1433)。

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

在整个过程中,它基本上会牵着你的手。我们发现这个工具非常宝贵。