7

Mi piacerebbe avere un'implementazione personalizzata dell'attributo [Autorizza] nei controller.Come creare un'autorizzazione personalizzata in ASP.NET Core (ASP.NET 5)

Questo è quello che ho fatto.

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

Cosa mi manca? MyRequirement authorizationhader non viene mai chiamato. Grazie.

+2

sono effettivamente autenticato? L'autorizzazione non entrerà in vigore nelle politiche finché non avrai un'identità. – blowdart

+0

Non lo sono. Sembra che io stia cercando il middleware di autenticazione di base. – Chatumbabub

+0

Intendi basic come in auth HTTP o basic as in, voglio spingere questa identità su ogni richiesta mentre provo? – blowdart

risposta

6

credo vi manca questa parte:

services.AddSingleton<IAuthorizationHandler, MyRequirementHandler>(); 

Source

+0

È possibile applicare una politica senza un nome in modo che la politica venga applicata in tutte le richieste di autorizzazione? –

+0

Come ottenere l'accesso alle intestazioni da qui? –

+0

@mr_squall se hai bisogno di accedere alle intestazioni per ottenere l'utente/principale delle attestazioni puoi usare ** context.user.Identity ** digitandolo come ClaimsIdentity – raghav710