如何使用IIS从Blazor服务器获取WindowsIdentity的HttpContext(或AccessToken)



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

public void RunImpersonated(HttpContext context, Action action)
{
// When running in IIS Express AccessToken(context) returns "NT AUTHORITYANONYMOUS 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中这样做。

在启动.配置我有:

app.UseAuthorization();
app.UseAuthentication();

在Startup.ConfigureServices中,我有:

services.AddAuthentication(IISDefaults.AuthenticationScheme);
services.AddAuthorization();

在IIS中,该站点设置为WindowsAuthentication=Enabled,Anonymous=Disabled。最终,我想使用DatabaseConnection.SsisIntegratedSecurity调用SQL,并希望以当前windows身份验证用户(不是AppPool用户,而是使用来自浏览器的凭据(的身份进行调用。

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

@inject AuthenticationStateProvider AuthenticationStateProvider
.
.
.

var token = ((WindowsIdentity) AuthenticationStateProvider.GetAuthenticationStateAsync().Result.User.Identity).AccessToken;

允许,在IIS上:

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

public class ImpersonationHelper : IImpersonationHelper
{
.
.
.
public void RunImpersonated(SafeAccessTokenHandle accessToken, Action action)
{
WindowsIdentity.RunImpersonated(accessToken, action);
}

相关内容

  • 没有找到相关文章

最新更新