0

Ich bin auf der Suche nach einem "einfachen" Weg, um Rollenansprüche an den lokalen Benutzer automatisch hinzufügen, um meine Autorisierungslogik zu testen; das heißt, dem lokalen Benutzer bestimmte Ansprüche hinzufügen zu wollen, bevor sie von meinen Controllern autorisiert werden..NET Core MVC hinzufügen Rolle Anspruch an lokalen Benutzer in der Entwicklung vor der Autorisierung

Ich habe gelernt, dass in der Vergangenheit so etwas wie dies für die Controller getan werden könnte:

#if DEBUG 
protected override void OnAuthorization(AuthorizationContext filterContext) 
{ 
    var roles = new[] { "role-under-test"}; 
    HttpContext.User = new GenericPrincipal(new GenericIdentity("DebugUser"), roles); 
    base.OnAuthorization(filterContext); 
} 
#endif 

Noch zu .NET Kern vor, dass war das, was in jetzt arbeite ich. Langsam habe ich mich an den unten dargestellten Code gewagt, der zu funktionieren scheint, aber im Vergleich zum obigen Beispiel ist es eindeutig viel mühsamer. Meine Frage ist also, ob jemand einen besseren - einfacheren - Weg kennt, dies zu erreichen?

Das benutzerdefinierten Berechtigungs Attribut:

public class CustomAuthAttribute : RolesAuthorizationRequirement { 
    public CustomAuthAttribute(IEnumerable<string> allowedRoles) : base(allowedRoles) { } 

    protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, RolesAuthorizationRequirement requirement) { 
#if DEBUG 
     context.User.AddIdentity(new ClaimsIdentity(new GenericIdentity("DebugUser"), new[] { 
      new Claim(ClaimsIdentity.DefaultRoleClaimType, "users"), 
      new Claim(ClaimsIdentity.DefaultRoleClaimType, "admins") 
     })); 
#endif 
     return base.HandleRequirementAsync(context, requirement); 
    } 
} 

In Startup.cs

public void ConfigureServices(IServiceCollection services) { 
    // ... 

    services.AddAuthorization(options => 
     options.AddPolicy("UsersAndAdmins", 
      policy => policy.AddRequirements(new CustomAuthAttribute(new []{"users", "admins"})))); 
} 

Und dann in den Controllern es:

[Authorize(Policy = "UsersAndAdmins")]  
public class HomeController : Controller { 
    // ... 
+1

Haben Sie https: // channel9.msdn.com/ Blogs/Seth-Juarez/Erweiterte aspNET-Core-Authorization-with-B ausgecheckt Arry-Dorrans auf Kanal 9. Es scheint, als würden sie dir sehr helfen. Es ist eine 2-Video-Serie, aber es gibt viele tolle Infos drin. das ist eigentlich der zweite der beiden –

Antwort

1

Sie mögen Ansprüche Transformation;

schreiben Ansprüche Transformation, die in wie

public class ClaimsTransformer : IClaimsTransformer 
{ 
    public Task<ClaimsPrincipal> TransformAsync(ClaimsTransformationContext context) 
    { 
     ((ClaimsIdentity)context.principal.Identity).AddClaim(new Claim("Admin", "true")); 
     return Task.FromResult(principal); 
    } 
} 

Und Draht it up startup.cs

innen Configure sieht
app.UseClaimsTransformation(new ClaimsTransformationOptions 
{ 
    Transformer = new ClaimsTransformer() 
}); 

Natürlich, wenn es für den Test ist man es in einer Umgebung Check wickeln würde, um sicherzustellen, Sie sind in Ihrer Entwicklungsumgebung :)

+0

Haben Sie diesen Code selbst ausprobiert? Mit 'IClaimsTransformer' musste ich' public Task TransformAsync (ClaimsTransformationContext) 'anstelle der oben genannten Funktion implementieren. Aber abgesehen davon war die Antwort sicherlich eine Antwort, die mir geholfen hat, also werde ich sie als Antwort akzeptieren, sollten Sie die Antwort bearbeiten, um diesen Kommentar zu reflektieren. :) –

+1

Hah, nein, es wurde von RTM geändert. Es tut mir leid, dass ich so faul bin – blowdart

Verwandte Themen