.NETCore2如何在没有设置控制器中的授权属性的情况下填充用户

.NETCore2如何在没有设置控制器中的授权属性的情况下填充用户

问题描述:

请求使用中介模式的管道,其中一个步骤是Authorization。定义像AdminAuthorizer类:.NETCore2如何在没有设置控制器中的授权属性的情况下填充用户

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

public virtual async Task Authorize(TRequest message) 
{ 
    var user = _httpContextAccessor.HttpContext.User; 
    ... 
} 

问题是,如果我没有在控制器动作指定[授权]的HttpContext.User中是“空”。如果应用[授权]用户在我的JWT令牌中填充了信息。

[Authorize] 
public async Task<IActionResult> SetActive(SetActiveCommand activeMessage) 
{ 
    await _mediator.Send(activeMessage); 
    return Ok(); 
} 

什么我需要做的是能够获得请求中的HttpContext.User中使用我的授权(TRequest消息)的方法?

enter image description here

下面的代码示例这里ASP.NET Core Authorization Lab:Step 2: Authorize all the things可以申请授权使用过滤器的所有请求。

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

这既不是我想要的,但意识到了什么,如果希望在不必指定[授权]属性应该从Request.Headers令牌和解码它自己的用户。

您可以指示ASP.NET Core在不诉诸授权的情况下执行身份验证。这是通过在认证配置中指定一个默认的认证方案进行:

public class Startup 
{ 
    public void ConfigureServices(IServiceCollection services) 
    { 
     services.AddAuthentication("<your-authentication-scheme>"); 
    } 

    public void Configure(IApplicationBuilder app) 
    { 
     app.UseAuthentication(); 
    } 
} 

这样做意味着ASP.NET核心将执行与您为每个请求所指明的计划相关联的认证处理程序。

+0

玩这个和有services.AddAuthentication()和app.UseAuthentication(),但如果不指定services.AddAuthorization()不获取用户/声明。谢谢。 – Riga