c# - 模拟不起作用 - 在 IIS 中托管 Windows 身份验证的 Asp.Net 核心 3.1 应用程序
问题描述
我创建了一个 Blazor Server 应用程序(.Net core 3.1)。该应用程序使用 Windows 身份验证。该应用程序将需要访问一些 Windows 服务,如文件共享和具有集成安全性的数据库等。因此它具有以下模拟代码。
var identity = await IdentityProvider.GetIdentityAsync();
if (identity.IsAuthenticated && identity is WindowsIdentity wid)
{
return WindowsIdentity.RunImpersonated(wid.AccessToken, () =>
{
Fun1(....); // Should be called using the authentication of logged in user
});
应该使用正在使用该Fun1()
应用程序的 Windows 用户的身份而不是用于运行网站的帐户来调用。
例如,我的网站的应用程序池的标识是MyDomain\UserX
. 当用户MyDomain\UserY
使用该网站时。我希望该功能Fun1()
被模拟MyDomain\UserY
而不是MyDomain\UserX
.
我在 IIS 上创建了一个网站,发布了代码,禁用了匿名身份验证并启用了 Windows 身份验证。但是,该函数Fun1()
仍然是使用应用程序池中的身份调用的吗?是否应该更改 Active Directory 中的任何设置?
解决方案
为了使用登录用户的凭据(访问您的 API 而不是站点的应用程序池身份的用户)访问数据库,您需要设置 Kerberos 约束委派。请参考:https ://docs.microsoft.com/en-us/windows-server/security/kerberos/kerberos-constrained-delegation-overview
这可能对您没有帮助,因为很久以前就提出了这个问题。但如果其他人处于相同的情况,可能会有用。
推荐阅读
- python - 功能:从 DataFrame 中查找 Col 名称
- c# - 如何在 2sxc 应用程序的详细信息视图中显示第二种语言?
- excel - 如何将此宏运行到每一行?
- powershell - 寻找 PS 命令以在用户登录时静默执行程序
- javascript - Web Serial API - 自动读取
- erlang - 为什么在 GenServer 中启动 Supervisor 会导致进程重启行为出现问题?
- python - 为什么什么都没有打印出来?
- python - 使用来自 SALIb 的 saltelli.sample 和具有整数值的变量
- google-cloud-platform - 如何设置凭据以从 GCE VM 命令行使用 Gmail API?
- reactjs - 构建后反应不消耗 API