11

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

SQL2008R2 数据库服务在自定义域帐户“SqlServer”下作为命名实例“SQL2008R2”运行。服务器正在运行 Windows Server 2008 R2 企业版。我为此创建了一个 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)。

该应用程序在 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>

我的 web 配置指定了 Windows 身份验证和模拟,因为我使用异步页面,所以我还启用了模拟策略流动......

<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 上运行?

4

2 回答 2

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

它基本上会在整个过程中握住你的手。我们发现该工具非常宝贵。

于 2012-12-05T16:20:22.453 回答