Authentication .NETCore2如何在不设置控制器中的“授权”属性的情况下填充用户

Authentication .NETCore2如何在不设置控制器中的“授权”属性的情况下填充用户,authentication,asp.net-core,jwt,Authentication,Asp.net Core,Jwt,使用中介模式创建请求管道,其中一个步骤是授权。将AdminAuthorizer类定义为: public AdminAuthorizer(IHttpContextAccessor httpContextAccessor) { _httpContextAccessor = httpContextAccessor; } public virtual async Task Authorize(TRequest message) { var user = _httpContextAcce

使用中介模式创建请求管道,其中一个步骤是授权。将AdminAuthorizer类定义为:

public AdminAuthorizer(IHttpContextAccessor httpContextAccessor)
{
    _httpContextAccessor = httpContextAccessor;
}

public virtual async Task Authorize(TRequest message)
{
    var user = _httpContextAccessor.HttpContext.User;
    ...
}
问题是,如果我没有在控制器操作中指定[Authorize],HttpContext.User将为“空”。如果应用[授权]用户在我的JWT令牌中填充了信息

[Authorize]
public async Task<IActionResult> SetActive(SetActiveCommand activeMessage)
{
    await _mediator.Send(activeMessage);
    return Ok();
}
[授权]
公共异步任务SetActive(SetActiveCommand-activeMessage)
{
wait_mediator.Send(activeMessage);
返回Ok();
}
我需要做什么才能获得HttpContext。请求中的用户正在使用我的授权(TRequest消息)方法?


下面的代码示例可以使用过滤器为所有请求请求授权

services.AddMvc(config =>
{
    var policy = new AuthorizationPolicyBuilder()
                     .RequireAuthenticatedUser()
                     .Build();
    config.Filters.Add(new AuthorizeFilter(policy));
});

这不是我想要的,但我意识到,如果希望用户不必指定[Authorize]属性,就应该从Request.Headers获取令牌并自己解码。

您可以指示ASP.NET Core执行身份验证位,而无需诉诸授权。这是通过在身份验证配置中指定默认身份验证方案来实现的:

公共类启动
{
public void配置服务(IServiceCollection服务)
{
服务。添加身份验证(“”);
}
公共void配置(IApplicationBuilder应用程序)
{
app.UseAuthentication();
}
}

这样做意味着ASP.NET Core将执行与您为每个请求指定的方案相关联的身份验证处理程序。

使用此处理程序并具有services.AddAuthentication()和app.UseAuthentication(),但如果未指定services.AddAuthorization()则不会获取用户/声明。谢谢