首页 > 解决方案 > 模拟不起作用 - 在 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 中的任何设置?

标签: c#asp.net-coreiiswindows-authenticationblazor

解决方案


为了使用登录用户的凭据(访问您的 API 而不是站点的应用程序池身份的用户)访问数据库,您需要设置 Kerberos 约束委派。请参考:https ://docs.microsoft.com/en-us/windows-server/security/kerberos/kerberos-constrained-delegation-overview

https://blogs.uw.edu/kool/2016/10/26/kerberos-delegation-in-active-directory/#:~:text=What%20is%20Kerberos%20Delegation%3F,tier%20is%20the% 20web%20 网站

这可能对您没有帮助,因为很久以前就提出了这个问题。但如果其他人处于相同的情况,可能会有用。


推荐阅读