首页 > 解决方案 > SSO 与跨多个 REST-API 的 Windows 身份验证?(Kerberos 双跳)

问题描述

我有以下场景:(客户端/浏览器)=>(Web 服务/Web API)=>(SharePoint REST-Api)。基本上,我想要实现的是让中间应用程序(WebService/Web API)充当 SharePoint-REST-API 前面的外观,以简化需要与我们的 SharePoint 应用程序通信的任何人的开发。(基本上,我们将几个 SharePoint 请求调用包装到 Web API/外观中的一个调用中)。

现在的问题是,我还希望能够将登录的 Windows 用户(AD 用户)从客户端发送到 Web 服务,然后 Web 服务应代表该 Windows 用户执行操作并执行所需的任何操作SharePoint REST-API(这是为了确保文件等的权限实际上是根据经过身份验证的用户设置的)。

到目前为止,我们尝试的是在一台服务器上设置 uo Web 服务,而在另一台服务器上设置 SharePoint。然后我们尝试使用 Kerberos 和委派设置身份验证,但无法正常工作。根据我提供的信息,如果我们设法正确设置 Kerberos,你们认为像这样的“双跳”会起作用吗?

另一个让我印象深刻的想法是,也许我们不必将 Web 服务和 SharePoint 应用程序托管在两个不同的服务器上,但我们实际上可以将它们都托管在具有两个站点的单个 IIS 服务器内的同一台服务器上。这仍然需要使用双跳设置 Kerberos 吗?或者只有在票证实际离开一台服务器到另一台服务器时才计算“跳跃”。因为在此处描述的情况下,从 Web 服务到 SharePoint-REST-API 的请求永远不会离开实际服务器,但它可能会交叉域(如网络域.. 不是 AD 域)。这是否可行,而不必为 Kerberos 双跳、SPN 和其他问题而烦恼..?

标签: asp.netauthenticationiissharepointkerberos

解决方案


当您使用集成身份验证时,匿名被禁用,模拟被启用。因此安全设置将不允许您的站点访问任何网络服务器上的资源。

当您使用集成身份验证对 IIS 服务器进行身份验证时,这会用完您的第一个“跃点”。当 IIS 尝试访问网络设备时,这将是不允许的双跳或第二跳。iis 不会将这些凭据传递给下一个网络设备。

如果您使用匿名启用并模拟关闭,则不会发生此问题。

要在 iis 中配置 Kerberos 身份验证,您可以按照以下步骤操作:

1)打开iis管理器并选择站点。

2)从中间窗格中选择身份验证功能。

3)启用Windows身份验证并禁用匿名。

4) 使用 Windows 身份验证,单击操作窗格中的提供程序。

5)按以下方式设置提供者:

谈判

NTLM

在此处输入图像描述

保存更改。

6)返回并选择配置编辑器。

从部分下拉列表中选择 system.webServer/security/authentication/windowsAuthentication。

“useAppPoolCredentials”设置为 true。

“useKernelMode”为“True”并保存设置。

7)重启iis。

8) 配置 SPN

以管理员身份打开命令提示符并运行以下命令以检查机器名称:

hostname

当您有自定义主机名并且想要将其注册到域帐户时,您需要在下面创建一个 SPN。

setspn -a HOST/${FQDN_HOST} ${MACHINE_NAME}
setspn -a http/${FQDN_HOST} ${MACHINE_NAME}

9)完成后将应用程序池身份设置为自定义帐户并设置用户名和密码。

您可以参考以下文章以获取更多详细信息:

https://weblogs.asp.net/owscott/iis-windows-authentication-and-the-double-hop-issue

https://active-directory-wp.com/docs/Networking/Single_Sign_On/SSO_with_IIS_on_Windows.html

https://techcommunity.microsoft.com/t5/IIS-Support-Blog/Setting-up-Kerberos-Authentication-for-a-Website-in-IIS/ba-p/324644


推荐阅读