【发布时间】:2021-08-19 11:41:23
【问题描述】:
我在 IIS 上托管的 MVC .NET Core 和我的开发环境中非常成功地使用了以下内容(WindowsIdentity.GetCurrent().AccessToken 在开发中与 IISExpress 配合使用)
public void RunImpersonated(HttpContext context, Action action)
{
// When running in IIS Express AccessToken(context) returns "NT AUTHORITY\ANONYMOUS LOGIN"
SafeAccessTokenHandle token;
if (_env.IsDevelopment())
{
token = WindowsIdentity.GetCurrent().AccessToken;
}
else
{
token = AccessToken(context);
}
WindowsIdentity.RunImpersonated(token, action);
}
我现在想对 Blazor Server 做一些类似的事情,但是当代码在我的 IIS 生产服务器上运行时,我很难让 HttpContext 传递给这个方法。
我尝试注入 IHttpContextAccessor 并调用它的 .HttpContext 但它总是返回 null,我不确定我是否应该在 Blazor 中这样做。
在 Startup.Configure 我有:
app.UseAuthorization();
app.UseAuthentication();
在 Startup.ConfigureServices 我有:
services.AddAuthentication(IISDefaults.AuthenticationScheme);
services.AddAuthorization();
在 IIS 中,站点设置为 WindowsAuthentication = Enabled,Anonymous = Disabled。 最终,我想使用 DatabaseConnection.SsisIntegratedSecurity 调用 SQL,并希望以当前 Windows 身份验证用户的身份进行调用(不是 AppPool 用户,而是使用来自浏览器的凭据)。
【问题讨论】:
-
这对 IP 地址很有用,我已经在那里发布了我的代码,但是当我以类似的方式保存 AccessToken 时,当我开始使用它时,我收到“安全句柄已关闭”错误。