在 Web App 和 API 之间设置 Kerberos 2 跳身份验证

Setting up Kerberos 2 hop authentication between Web App and API

我正在使用 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. 向域帐户添加了指向域中网站 DNS 地址的 SPN

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

  4. 已为网站启用 Windows 身份验证和模拟。

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

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

    我已经为此花费了数小时,非常感谢任何帮助。我没主意了。

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

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

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