如何在ASP.NET Core中创建自定义授权(ASP.NET 5)

问题描述:

我想在控制中自定义实现[Authorize]属性。如何在ASP.NET Core中创建自定义授权(ASP.NET 5)

这就是我所做的。

  1. StartupClass在ConfigureServices

    services.AddAuthorization(options => 
    {  
        options.AddPolicy("Authorize", policy => 
        { 
         policy.AddRequirements(new MyRequirement()); 
        }); 
    }); 
    
  2. MyRequirement

    public class MyRequirement : AuthorizationHandler<MyRequirement>, IAuthorizationRequirement 
    { 
        protected override void Handle(AuthorizationContext context, MyRequirement requirement) 
        { 
         //some work 
         //if shloud be authorized 
         context.Succeed(requirement); 
        } 
    } 
    
  3. 的TestController

    [Authorize("Authorize")] 
    [Route("api/[controller]")] 
    public class TestController : Controller 
    { 
        ... 
    } 
    

我错过了什么? MyRequirement授权人从不会被调用。 谢谢。

+2

你实际身份验证?在您拥有身份之前,授权不会执行策略。 – blowdart

+0

我不是。看起来我正在寻找基本身份验证中间件.. – Chatumbabub

+0

您的意思是基本的HTTP身份验证或基本身份验证,我想在测试时在每个请求上推送此身份? – blowdart

我相信你缺少这一部分:

services.AddSingleton<IAuthorizationHandler, MyRequirementHandler>(); 

Source

+0

是否可以应用没有名称的策略,以便策略将应用于所有授权请求中? –

+0

如何从这里访问标题? –

+0

@mr_squall如果您需要访问标题以便获取用户/声明主体,您可以使用** context.user.Identity **将其类型化为ClaimsIdentity – raghav710