5

情况:

我的 Web 服务器上部署了一个 .NET asmx Web 服务。此服务调用另一台服务器(我们的 SharePoint 服务器,如果相关)上的服务。我想使用客户端的凭据从我的 Web 服务模拟/委托对 SharePoint 服务的调用。

问题:

当我调用 MY Web 服务并且它调用 SharePoint 时,我从 SharePoint 服务收到 401 响应。

设置:

  • 我的 Web 服务器正在运行 IIS 7。应用程序池在“网络服务”下运行
  • 在我的 Windows Server 2003 域控制器上,Web 服务器启用了“信任委派(仅限 Kerberos)”。
  • 在 ISS 中,我的应用程序禁用了匿名身份验证、启用了模拟和启用了 Windows 身份验证,并启用了所有三个提供程序(协商:Kerberos、协商和 NTLM)
  • SharePoint 服务器设置为启用匿名、启用模拟和启用 Windows 身份验证,并仅启用提供程序 NTLM。

我可以在 SharePoint 日志中看到,当我在 Visual Studio 中本地运行时,一个用户名正在通过(并且服务正常工作)但是当我在 Web 服务器上运行它时,日志文件中没有用户名并且我收到 401 错误

为了使 Kerberos 委派工作,我设置了哪些错误?

想法?谢谢!

4

3 回答 3

5

平台:

使用 IIS7 这是我在两台服务器上所做的。我们希望 Kerberos 身份验证“跳”到的第一台服务器和第二台服务器。

步骤1:

对于包含您正在调用的服务的 IIS 站点(在每台服务器上),请进入 IIS 管理器,单击左侧连接下的站点,然后打开 IIS 下的“身份验证”部分。将“ASP.NET 模拟”设置为启用,将“Windows 身份验证”设置为启用。身份验证下的所有其他选项(匿名、表单等)应设置为禁用。

在“Windows 身份验证”下,右键单击并选择“提供程序”。将唯一的提供程序设置为“Negotiate:Kerberos”(这会强制使用 Kerberos。如果需要,在 Kerberos 工作后,您可以同时使用“Negotiate”和“NTLM”提供程序并删除“Negotiate:Kerberos”,以便客户端无法使用Kerberos 是否可以连接。注意:我目前将我的设置为“协商”和“NTLM”,它似乎可以工作)

在“Windows 身份验证”下,右键单击并选择“高级设置”。取消选中“启用内核模式”框。(我的扩展保护选项设置为关闭,没有尝试其他任何操作)

第2步:

对于每台服务器,您必须设置 SPN。SPN 如下(A 或 B):

A:

如果您的应用程序池在作为 DOMAIN ACCOUNT 的 IDENTITIY 下运行,请将以下 SPN 添加到域控制器上的 THAT DOMAIN ACCOUNT

http/COMPUTER_NETBIOS_NAME 
http/COMPUTER_NETBIOS_NAME.FULLY_QUALIFIED_DOMAIN_NAME 
http://COMPUTER_NETBIOS_NAME.FULLY_QUALIFIED_DOMAIN_NAME

(如果您没有在默认端口上运行,还添加另外 3 个附加端口名称的条目:http/COMPUTER_NETBIOS_NAME:PORT 等)

乙:

如果您的应用程序池在 IDENTITY“NetworkService”下运行,则添加与上述相同的 SPN,但将“http”替换为“HOST”,然后添加到域控制器上的 COMPUTER_NETBIOS_NAME。

我仍在努力在生产中实现这一点,但这在我的测试环境中对我有用。当我发现更多信息时,我会保持更新。

笔记:

如果您在连接时直接在 url 中使用 COMPUTER_NETBIOS_NAME,则此方法有效。如果您使用别名 (www.mysite.mydomain.com) 或直接使用 IP 地址,这将不起作用。我相信,虽然我没有完全测试过,但您必须按照上述步骤操作,但在添加 SPN 时将 COMPUTER_NETBIOS_NAME 替换为别名或 IP 地址。(或将其与 netbios 和别名/ip 一起添加,不太确定)

此外,如果您收到有关设置对集成无效的错误...在您打开“ASP.NET 模拟”之后,您可能需要添加

<validation validateIntegratedModeConfiguration="false" />

到 system.webServer 部分中的 web.config

于 2013-08-07T17:38:02.520 回答
1

尝试这个:

移至Negotiate提供者列表的顶部。并且,在applicationHost.config通常位于 下的文件中,为您的应用程序C:\Windows\System32\inetsrv\config添加标签下的标签,如下所示:useKernelMode="true" useAppPoolCredentials="true"<windowsAuthentication><location>

<location path="YOUR_APPLICATION_PATH">
    <system.webServer>
        <security>
            <authentication>
                <anonymousAuthentication enabled="false" />
                <windowsAuthentication enabled="true" useKernelMode="true" useAppPoolCredentials="true">
                    <providers>
                        <clear />
                        <add value="Negotiate" />
                        <add value="NTLM" />
                    </providers>
                </windowsAuthentication>
            </authentication>
        </security>
    </system.webServer>
</location>
于 2013-08-02T20:08:36.587 回答
1

委派需要 Kerberos。您必须使 SharePoint 服务器支持使用 Kerberos 进行身份验证。

于 2013-08-05T16:09:31.117 回答