7

Chciałbym mieć niestandardową implementację atrybutu [Authorize] w kontrolkach.Tworzenie niestandardowej autoryzacji w środowisku ASP.NET Core (ASP.NET 5)

Oto, co zrobiłem.

  1. StartupClass w 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 
    { 
        ... 
    } 
    

Czego mi brakuje? Mysz autoryzacji MyRequirement nigdy nie jest wywoływana. Dziękuję.

+2

Czy rzeczywiście uwierzytelnione? Autoryzacja nie będzie działać zgodnie z zasadami, dopóki nie uzyskasz tożsamości. – blowdart

+0

Nie jestem. Wygląda na to, że szukam oprogramowania pośredniczącego do uwierzytelniania podstawowego. – Chatumbabub

+0

Masz na myśli podstawowe, jak w uwierzytelnianiu HTTP, czy podstawowe w tym, co chcę, aby tę tożsamość umieścić na każdej prośbie podczas testu? – blowdart

Odpowiedz

6

wierzę brakuje tej części:

services.AddSingleton<IAuthorizationHandler, MyRequirementHandler>(); 

Source

+0

Czy można zastosować Politykę bez nazwy, aby zasady były stosowane we wszystkich żądaniach autoryzacji? –

+0

Jak uzyskać dostęp do nagłówków stąd? –

+0

@mr_squall, jeśli potrzebujesz dostępu do nagłówków, aby uzyskać uprawnienia użytkownika/roszczenia, które możesz użyć ** context.user.Identity ** przez typowanie go jako ClaimsIdentity – raghav710

Powiązane problemy