1

我正在使用 Windows Server 2018、IIS 10 和我的 Web 应用程序以 .Net Framework 4.5.1 为目标。我的 API 是使用 .Net Core 2.1 和 Visual Studio 2017 构建的。网站和 API 都使用 Windows 身份验证。

我使用此人的教程尝试设置 Kerberos 两跳身份验证(https://blogs.msdn.microsoft.com/surajdixit/2018/02/07/kerberos-configuration-manager-for-internet-information-services-server/)。

我已经采取并尝试过的步骤,

  1. 将应用程序池设置为在自定义域帐户下运行。

  2. 向域帐户添加了一个 SPN,该 SPN 指向域中的网站 DNS 地址

  3. 将应用程序池切换到经典模式

  4. 为网站打开 Windows 身份验证和模拟。

  5. 让系统管理员授予自定义域帐户委托权限。

    我目前面临的问题是,我在 IIS 中对应用程序池和网站进行了所有这些修改,当我尝试连接到网站时,它会提示输入凭据,这不应该发生,因为它应该通过我的身份验证我的 Windows 域帐户,当我输入凭据时,它会再次刷新并提示输入凭据。在本地运行时,一切正常,并且我的 Web 应用程序中的 HttpClient 成功调用了 API。

    我已经花了几个小时在这方面,并希望得到任何帮助。我没主意了。

4

1 回答 1

1

因此,在尝试了多次演练并与其他开发人员合作后,我发现问题出在应用程序、Web 应用程序和 api 都在同一台服务器上运行。一旦我将 api 移动到它自己的专用服务器,我就不需要模拟,并且能够从应用程序池中加载用户配置文件凭据,因为它作为域帐户运行。HttpClient 和 WebClient 对象都成功地通过设置 UseDefaultCredentials = true 向 api 发出请求。

如果有人遇到此问题,请尝试将您的 api 托管在不同的服务器上。我花了几天时间认为这是我在配置方面做错了什么,最后,它只是我托管应用程序的地方。

可能有一种方法可以在同一台服务器上成功完成这项工作,但我无法让它工作。也许其他更有经验的人可以添加到这篇文章中,以帮助展示如何在同一台服务器上执行此操作。祝大家编码愉快。

于 2018-08-09T14:47:26.997 回答