2017-07-28 2 views
0

Meine API verwendet und die HttpContext.User.IsAuthenticated hat True auf ihren Wert, so dass ich [Authorize] auf meinen Controllern verwenden kann.Hinzufügen von Benutzerrollen in Runtime für ASP.NET Core API Autorisierung

Aber jetzt möchte ich rollenbasierte Authentifizierung, wie [Authorize(Policy = "TestPolicy")]. Ich habe die gewünschten Richtlinien auf meiner Startup.cs mit AddAuthorization(...) Erweiterung hinzugefügt.

Die Anforderungen geben code 403 (nicht autorisiert) zurück, da die HttpContext.User.Identity.Roles nicht aufgefüllt ist.

Ich habe eine Middleware zum Auffüllen dieser Eigenschaft erstellt, und ich kann die Rollen des Benutzers mit UserManager.GetRolesAsync(user) abrufen. Jetzt habe ich eine Liste von Benutzerrollen, aber wie kann ich dann zu dem aktuellen HttpContext.User hinzufügen, damit der Benutzer mit den Richtlinien autorisiert werden konnte, die ich hinzufügte?

Antwort

1

Während jwt store Rolle in der jwt als Anspruch zu schaffen, und erstellen Sie eine Genehmigungspflicht:

public class PermissionHandler : AuthorizationHandler<PermissionRequirement> 
    { 
     protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, PermissionRequirement requirement) 
     { 

      if (context.User.HasClaim(c => c.Type == "role" && c.Value = 
requirement.Permission)) 
      { 
       System.Console.WriteLine("User has required permission: " + requirement.Permission); 
       context.Succeed(requirement); 
       return Task.CompletedTask; 
      } 
      System.Console.WriteLine("User is forbidden"); 
      return Task.CompletedTask; 
     } 
    } 

Kasse für folgenden Details:

https://github.com/adnan-kamili/AspNetCore-Web-Api-Rest-Starter-Kit

+0

Nizza Starter-Kit Sie haben, nehmen viele Details in Betracht ziehen. – RBasniak

Verwandte Themen