asp.net-core - 将经过身份验证的用户传递到同一 IIS 实例中的 API 应用程序
问题描述
环境
我有两个应用程序,一个调用 API 的客户端应用程序:
ClientApplication.Web
My.Api
两者都作为具有自己的应用程序池的应用程序托管在 IIS 中。两者都设置为使用 Windows 身份验证,并禁用所有其他身份验证选项。
要求
公司政策是应用程序池必须在服务帐户下运行SRV\iis_sa
,因此我将两个应用程序池设置为在该服务帐户下运行。
行为
当我浏览到时My.Api/swagger
,它会提示输入凭据...我可以调用任何控制器方法,并且使用调试器可以看到User.Identity.Name
确实是domain\MyName
..
当我浏览到ClientApplication.Web
我输入我的凭据时,这很好。我domain\MyName
在右上角看到我的(使用 显示User.Identity.Name
)这告诉我 Windows Auth 工作正常。
但是,当ClientApplication.Web
页面加载时,它会立即调用 api,然后我得到一个身份验证错误。我可以通过将ClientApplication.Web
应用程序池的标识设置为 . 来克服此错误domain\MyName
。这会导致GetData
调用成功。
ApproveRow
然后,当我调用在 api 端使用的 API 控制器方法调用时User.Identity.Name
,它始终记录domain\MyName
为执行操作的用户(在应用程序池中为 设置的相同用户帐户ClientApplication.Web
)。我已经和同事核对过了,它总是记录我的名字,而不是他们自己的名字。我认为这是因为应用程序池标识设置为我的名字。
问题
如何将当前经过身份验证的用户从我的 Web 应用程序传递到 IIS 中的 api 应用程序?
或者
我需要在 IIS 中更改什么设置,以便通过身份验证的用户,ClientApplication.Web
以便我可以使用User.Identity.Name
(等)My.Api
我尝试过的
(或试图尝试...)
- 尝试了应用程序池中的所有内置帐户
ClientApplication.Web
- LocalService、LocalSystem、NetworkService 和 ApplicationPoolIdentity(这些选项中的任何一个都会产生与我使用的相同的身份验证错误SRV\iis_sa
) - 启用了模拟
My.Api
(不同的错误,但似乎不兼容,所以避开了这个) - 对两个应用程序文件夹启用完全控制权限
SRV\iis_sa
(没有区别) - 试图添加
SRV\iis_sa
到Impersonate a client after authentication
本地安全策略中,但是这被 GPO 覆盖,我不确定它是否有助于解决问题。 - 将两个应用程序设置
useAppPoolCredentials
为 true,并为每个应用程序设置 true/false 的所有组合。 - 在每个应用程序的基本设置中,Connect as 设置为透传身份验证
也许我缺少一些简单的东西,如果有人能指出的话,我将不胜感激。
谢谢。
解决方案
推荐阅读
- node.js - 如何在 AWS Lambda 中设置环境变量或使用即时客户端库
- javascript - 检查客户端浏览器是否为 en-US、en-EG、en-AU、en-GB、en-CA 然后显示英文文件?
- android - Android - 如何使用一些 URL 深度链接到应用程序,然后在不使用 WebView 的情况下打开相同的 URL 应用程序内本机浏览器?
- java - 如何编写在三种颜色之间进行选择以生成特定图像的条件语句
- java - 打开项目时,intellij 中的构建选项将灰显
- docker - 最新的 docker 不再支持使用 registry.conf 了吗?
- excel - 使用 selection.find 查询数据库
- python - 替代 tkinter 文本框(插入 StringVar)?
- python - 是否可以在 Python 中为 randint 创建两个范围?
- ms-access - 根据另一个表单上的字段中的多个条目限制组合框中的值