我很混乱。
考虑以下:
- 具有名为 DOM 的域的 Active Directory 环境
- 具有 NetBIOS 名称 VS1 的 IIS 7 框
- 为 VS1 提供别名的 DNS 记录作为 pineapple.london.uk.corp
- 作为 DOM\PineappleService 运行的应用程序池
- Windows 身份验证已启用。
- 客户端使用 HttpWebRequest 调用盒子上的 XML/JSON ASP.NET 服务。
该服务调用网络上的工作站来收集信息。这在我使用 IIS Express 作为我运行的开发中有效,因为 IISX 只是一个 .exe
在生产中,服务工作正常,身份验证工作,但调用导致服务(作为 PineappleService 运行)访问网络上的内容的功能失败。
我怀疑是 SPN 注册问题,但我不知道要设置什么 SPN。
最近,我偶然发现了这篇文章,它似乎在说 fly in the face of other articles:
请注意,它说
SPN 要求与上述相同。与 IIS 6.0 不同(在 IIS 6.0 中我们必须为应用程序池标识添加形式为 http/ 的 SPN),您不必为 Domain1\Username1 添加像 http/ 这样的 SPN。
所以我不知道什么是对的了。我不知道是否需要注册 HTTP SPN 或 HOST SPN 或使用 DNS 别名或 NetBIOS 名称,并将它们设置在 PineappleService 帐户或 VS1 计算机帐户上。
我不知道当我尝试时是否存在缓慢的 AD 复制问题,这意味着我必须在反复试验之间等待一个小时。
现在一切都那么复杂。我作为系统操作员和开发人员工作了 15 年,我感觉到域和工作站以及权利和政策的终结。这一切都变得太多了。
谢谢你的帮助。
卢克
在开发中完全按照生产中的方式对其进行配置和测试之前,不应尝试这样做。通过 IIS 和自定义应用程序使用 Windows 身份验证和模拟可能非常复杂。即使它在没有准确反映生产的开发环境的情况下神奇地在生产中工作,如果您不得不调查一个问题,您也会完全迷失方向。
SPN
创建 SPN 时,通常会同时为 fqdn 和短名称创建 SPN。例子:
建议这些名称与 pre-windows 2000 名称(netbios 名称)和连接到服务时将使用的 dns 名称相匹配。如果这些都不是将用于连接到服务的名称,则该名称也应该有一个 SPN。
在不同帐户/计算机上为相同服务/名称注册的重复 SPN 是 Kerberos 委派无法正常工作的常见原因。Setspn 很乐意让您创建重复的 SPN。Microsoft 已发布一个修补程序来纠正此行为:
在 Windows 7 或 Windows Server 2008 R2 中将 setspn 命令与 -a 开关一起运行时会注册重复的 SPN
https://support.microsoft.com/kb/2717045
服务所在的目标计算机需要 SPN。
值得信赖的委派
将执行模拟的计算机或用户帐户需要指定为受信任的委派。如果用户帐户正在执行模拟,则执行模拟的计算机帐户也必须以相同的方式配置为受信任的委派。
在 Active Directory 用户和计算机中,单击计算机或用户帐户上的委派选项卡。(用户帐户不显示委派选项卡,除非它有 SPN。可能需要为用户帐户分配一个 SPN,如 RPC/用户名,以便出现委派选项卡)。
在委派选项卡上,选择“信任此用户/计算机以委派任何服务(仅限 Kerberos)”以获得不受约束的委派。
对于约束委派,选择“信任此用户/计算机仅委派指定服务”。选择“使用任何身份验证协议”。您可以单击“添加”并浏览到通告服务 SPN 的计算机,然后添加它们。请注意,当您运行 setspn.exe -L domain\useraccount 时,这些不会显示为 SPN。
委托模型
您需要确定要使用的委托模型。这个决定可能是出于安全原因。
Unconstrained 允许计算机或服务帐户模拟任何用户。这是非常强大的,许多组织都避免了。
约束委派将模拟活动限制为执行模拟的服务帐户可能连接到的特定目标计算机和服务(HTTP、CIFS 等)。它还具有额外的便利性,即无需帐户的凭据或预先存在的 Windows/Kerberos 安全令牌即可模拟任何帐户。
多个域
如果 FE/BE 服务器在不同的域中,则约束委派不起作用。
使用约束委派,执行模拟的帐户/计算机必须与目标资源/服务位于同一域中。该域通常是“资源”域。被模拟的帐户可能位于任何受信任的域中,包括其他林中的受信任域。
提升权限
执行模拟的用户帐户必须在运行将执行模拟的代码的计算机上拥有 SetTCB 特权(作为操作系统的一部分)。请注意,在 Windows Vista/7/2008 上,SetTCB 权限可能仅由具有高完整性级别的进程持有,因此可能需要将该帐户添加到本地管理员组。
授权用户身份必须是将执行模拟的计算机上本地用户组的成员。
作为操作系统的一部分,可以使用 gpedit.msc 或 gpmc.msc 进行分配。它位于“计算机”>“Windows 设置”>“安全设置”>“本地策略”>“用户权限分配”下。
Kerberos 第 5 版身份验证协议的工作
原理 http://technet.microsoft.com/en-us/library/cc772815%28WS.10%29.aspx
哇!正确配置所有内容后,您可以将所有内容提炼成一个易于排除故障的简单测试用例。假设您已经为 CIFS\fileserver.company.com 创建了一个 SPN,并且想要模拟 [email protected] 并访问该服务器上的一个共享:
这很可能根本不是 SPN 问题。在您的服务帐户 (PineappleService) 下运行的应用程序池很可能没有访问网络资源的权限。您并没有真正提供任何错误消息,但它确实听起来像是一个简单的权限问题。
您需要确保您的服务帐户可以访问您尝试获取的任何内容(您应该在问题中详细说明),无论是文件、信息等。
为了进行测试,您可以让您的服务帐户成为域中的管理员,但您绝对不应该像后期制作部署那样离开它。