2017-07-28 1 views
0

Mon API utilise UseJwtBearerAuthentication et le HttpContext.User.IsAuthenticated a sa valeur True, donc je peux utiliser [Authorize] sur mes contrôleurs. Mais maintenant je veux utiliser l'authentification basée sur le rôle, comme [Authorize(Policy = "TestPolicy")]. J'ai ajouté les politiques souhaitées sur mon Startup.cs en utilisant l'extension AddAuthorization(...).Ajout de rôles utilisateur en cours d'exécution pour l'autorisation ASP.NET Core API

Les demandes retournent code 403 (non autorisé), car le HttpContext.User.Identity.Roles n'est pas rempli.

J'ai créé un middleware pour remplir cette propriété, et je peux obtenir les rôles de l'utilisateur avec UserManager.GetRolesAsync(user). Maintenant, j'ai une liste de rôles d'utilisateurs, mais comment puis-je ajouter à la HttpContext.User curent afin que l'utilisateur puisse être autorisé avec les politiques que j'ai ajoutées?

Répondre

1

Lors de la création rôle magasin JWT dans le JWT comme une revendication, et créer une exigence d'autorisation:

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; 
     } 
    } 

caisse suivante pour plus de détails:

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

+0

kit de démarrage de Nice que vous avez, en prenant beaucoup détails en considération. – RBasniak