.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消息)的方法?
答
下面的代码示例这里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核心将执行与您为每个请求所指明的计划相关联的认证处理程序。
玩这个和有services.AddAuthentication()和app.UseAuthentication(),但如果不指定services.AddAuthorization()不获取用户/声明。谢谢。 – Riga