.NETCore2如何在不设置控制器

时间:2017-10-11 10:08:03

标签: authentication asp.net-core jwt

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

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

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

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

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

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

enter image description here

2 个答案:

答案 0 :(得分:0)

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

ButtonListener

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

答案 1 :(得分:0)

您可以指示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 Core将执行与您为每个请求指定的方案关联的身份验证处理程序。