我有一个 ASP.NET Core 应用程序想要在 IIS 上运行。但是,应用程序需要在用户上下文中操作,因为它会修改和读取 Windows Active Directory 中的某些数据。这可能需要特定的权利,而这些权利可能不是固有的。与检查 API 用户是否具有这些权限相比,让用户登录并被模拟更为简单。这可确保用户只能执行他们有权执行的操作,否则 Active Directory 中的命令将失败。
我的 web.config 看起来像这样:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<location path="." inheritInChildApplications="false">
<system.webServer>
<handlers>
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
</handlers>
<aspNetCore processPath="dotnet" arguments=".\RestTest.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="inprocess" />
</system.webServer>
<system.web>
<authentication mode="Windows" />
<identity impersonate="true"/>
</system.web>
</location>
</configuration>
对于IIS中站点的认证,是这样设置的: 认证 (Basic 已启用,因为默认情况下,它会自动使用当前登录的 Windows 用户。但是,我需要使用管理员帐户,因此我不希望自动使用当前用户;相反,用户名和每次都应该输入密码。这在 IIS 上运行的另一个 ASMX 服务器上有效,但是即使我启用 Windows 身份验证,它也不起作用)
我的应用程序池设置如下: 应用程序池
但是,当我使用以下命令输出当前用户时:
WindowsIdentity.GetCurrent().Name.ToString()
我得到:IIS APPPOOL\DefaultAppPool
有谁知道为什么线程没有在登录的 Windows 用户的用户上下文中运行?
在尝试解决此问题时,我遵循在 IIS 上运行的 ASP.NET Core 应用程序中设置模拟的标准做法。最初,我配置了 web.config 以启用 Windows 身份验证和模拟。期望设置
此外,我修改了 web.config 以使用基本身份验证,并对应用程序池设置进行了更改。这个想法是确保每个用户都手动输入他们的凭据,从而允许应用程序在每个人的用户上下文下运行。这对于与 Active Directory 的正确交互至关重要,尤其是根据用户的权限访问和修改数据。
但是,尽管对 web.config 和应用程序池进行了这些配置和修改,应用程序似乎仍然在 IIS APPPOOL\DefaultAppPool 上下文下运行,如 WindowsIdentity.GetCurrent().Name.ToString( 的输出所示) )。此结果与我的预期相反,因为我需要应用程序模拟登录用户,以便根据用户的权限与 Active Directory 正确交互。
我正在寻求有关我的设置中可能缺少或配置错误的内容的见解或建议,这些内容会阻止应用程序在身份验证后在用户上下文下运行。
你成功了吗?我的 iis 应用程序也遇到类似的情况。调用另一个应用程序的应用程序始终被识别为第二个应用程序中的应用程序池用户