asp.net - 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 和其他问题而烦恼..?
解决方案
当您使用集成身份验证时,匿名被禁用,模拟被启用。因此安全设置将不允许您的站点访问任何网络服务器上的资源。
当您使用集成身份验证对 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
推荐阅读
- c# - 如何通过 c# 将图像(条形码图像)传递给 rdlc 文件
- python-3.x - 我应该怎么做才能让新的小部件始终落后于 kivy 中的旧小部件?
- java - 如何在另一个线程上开始解析 Volley
- matlab - 通过 Jupyter Notebook 在 VSCode 中编码 MATLAB 不会因错误而停止执行
- python - 使用随机值对创建列表
- angular - Angular 和与 Entity Framewok Core 的多对多关系
- angular - 如何使用 rxjs 简化发射变化?
- python - undetected_chromedriver.v2 代理不工作 (proxy_auth_plugin.zip)
- html - 如何启用文件夹上传到
我正在做一个小项目,我的访问者可以上传他们的文件、图像等,一旦他们点击“发送”按钮,它就会将他们上传的内容发送到我设置的电子邮件地址。现在这里的问题是,如果访问者上传例如 5 个文件,它只会随机发送这 5 个文件中的一个,我希望它发送所有文件,那么有没有办法实现这一点?
我想我可以通过使文件上传字段接受文件夹来做到这一点,但我不确定如何准确地做到这一点,我知道我可以将文件夹
- excel - 将输入框变量从一个子传递到另一个