如何使用IIS从Blazor服务器获取WindowsIdentity.RunImpersonated(令牌、操作)的HttpContext(或AccessToken)

如何使用IIS从Blazor服务器获取WindowsIdentity.RunImpersonated(令牌、操作)的HttpContext(或AccessToken),iis,blazor,Iis,Blazor,我在IIS上托管的MVC.NET Core和我的开发环境中(WindowsIdentity.GetCurrent().AccessToken在开发中与IISExpress配合使用很好)非常成功地使用了以下内容 我现在想对Blazor服务器做一些类似的事情,但是当代码在我的IIS生产服务器上运行时,我很难获得一个HttpContext来传递给这个方法 我尝试注入IHttpContextAccessor并调用其.HttpContext,但它总是返回null,我不确定我是否应该在Blazor中这样做

我在IIS上托管的MVC.NET Core和我的开发环境中(WindowsIdentity.GetCurrent().AccessToken在开发中与IISExpress配合使用很好)非常成功地使用了以下内容

我现在想对Blazor服务器做一些类似的事情,但是当代码在我的IIS生产服务器上运行时,我很难获得一个HttpContext来传递给这个方法

我尝试注入IHttpContextAccessor并调用其.HttpContext,但它总是返回null,我不确定我是否应该在Blazor中这样做

在Startup.Configure中,我有:

          app.UseAuthorization();
          app.UseAuthentication();
在Startup.ConfigureServices中,我有:

 services.AddAuthentication(IISDefaults.AuthenticationScheme);
 services.AddAuthorization();
在IIS中,站点设置为启用WindowsAuthentication,禁用Anonymous。
最后,我希望使用DatabaseConnection.SsisIntegratedSecurity调用SQL,并希望以当前windows身份验证用户(不是AppPool用户,而是使用来自浏览器的凭据)的身份进行调用。

可以在任何.razor页面上获取访问令牌,如下所示:

@inject AuthenticationStateProvider AuthenticationStateProvider

.
.
.
  
 var token = ((WindowsIdentity) AuthenticationStateProvider.GetAuthenticationStateAsync().Result.User.Identity).AccessToken;
在IIS上允许:

ImpersonationHelper.RunImpersonated(token,
            () =>
            {
                // for example
                SsisJobs.StartJob(jobName);
            }
            );

请看:这对IP地址非常有效,我已经在那里发布了我的代码,但是当我以一种简单的方式保存AccessToken时,当我开始使用它时,我收到了“安全句柄已关闭”错误。
ImpersonationHelper.RunImpersonated(token,
            () =>
            {
                // for example
                SsisJobs.StartJob(jobName);
            }
            );

  public class ImpersonationHelper : IImpersonationHelper
    {

.
.
.
      public void RunImpersonated(SafeAccessTokenHandle accessToken, Action action)
        {
            WindowsIdentity.RunImpersonated(accessToken, action);
        }