我正在尝试使用 ASP.NET 4.5/SQL Server 2016 为 Web 应用程序设置模拟/委托。目标是在 Web 应用程序和 SQL Server 上使用 Windows 身份验证。
我在 Azure 上复制了一个类似于将用于生产的设置,但我似乎无法找到导致模拟不起作用的原因。
Azure VM #1 [机器名称:test-iis-server]:运行 IIS 8.5 并充当 Active Directory 域控制器的 Windows Server 2012
Azure VM #2 [机器名称:test-sql-server]:运行 SQL Server 2016 的 Windows Server 2016
Azure VM #3 [机器名称:test-client]:用于模拟用户连接到网站的 Windows 10 机器
我创建了一个名为TEST
. 可以使用在 Active Directory 中创建的用户连接到 3 台计算机。
IIS Web 服务器配置:
在 web.config 文件中:
Authentication mode = Windows
Identity impersonate = True
validation validateIntegratedModeConfiguration = False
Integrated security = SSPI
在 IIS 管理器中:
Windows authentication = Enabled
(Kernel-mode authentication = Disabled
,Providers = Negotiate:Kerberos
)ASP.NET Impersonation = Enabled
- 应用程序池 =
Integrated Managed Pipeline
(Identity = Custom Identity: test\my-svc-account
)在
Active Directory Users & Computers
- 对于每台计算机(Web 服务器、sql 服务器和用户计算机),我进入 Properties 并检查了
Delegation
选项卡Trust this computer for delegation to any service (Kerberos only)
。SQL 服务器配置
- 我没有在这里设置任何东西。我假设 ASP.NET 将使用登录 Web 应用程序的用户的凭据来访问 SQL Server 数据库。
- 编辑:SQL Server 服务帐户:
test\my-svc-account
结果:
如果我不在 Web 应用程序中使用模拟并使用在 SQL Server 中创建的已定义用户/密码登录,我的应用程序可以正常工作,并且如果需要,我可以获得 Windows 用户凭据。
使用模拟,打开 Web 应用程序页面时出现 SQL Server 连接错误:
Login failed for user 'TEST\test-iis-server$'
.
预期行为:
- Web 应用程序将使用用于登录“测试客户端”机器的凭据登录 SQL Server。
我已经阅读了很多关于如何为我的解决方案实施模拟/委托的内容,但似乎无法找到问题所在。任何人都知道问题可能来自哪里以及我如何解决它?
编辑#1:
- 根据我的阅读,我似乎需要设置 SPN。我对如何为我的双跳场景正确设置它们感到困惑。
- 我在 Active Directory 中创建了一个用户帐户来充当服务帐户。我已将此帐户设置为受信任以进行委派。
- 我将此帐户用作 IIS 中我的应用程序池的标识以及 SQL Server 实例的服务帐户。