使用中介模式请求管道,其中一个步骤是授权。将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消息)方法?
答案 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将执行与您为每个请求指定的方案关联的身份验证处理程序。