Authentication .NETCore2如何在不设置控制器中的“授权”属性的情况下填充用户
使用中介模式创建请求管道,其中一个步骤是授权。将AdminAuthorizer类定义为: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
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()则不会获取用户/声明。谢谢