2017-08-31 1 views
0

J'ai le AuthorizationRequirement et AuthorizationHandler qui est enregistré avec DI et fonctionne très bien. Cependant, lorsqu'une action avec [Authorize(Policy = "ConfirmedEmail")] est appelée dans un iframe (même origine), context.User.Identity.Name est toujours NULL et donc user. Est-ce que quelqu'un a une idée de pourquoi c'est, et plus important encore, comment le réparer?Pourquoi l'identité est-elle nulle lors de l'utilisation .net core 2 AuthorizationHandler dans iframe

Lorsque la même action est appelée directement (en dehors d'un iframe), context.User.Identity.Name est correct et la recherche de l'utilisateur réussit.

public class ConfirmedEmailRequirement : IAuthorizationRequirement { } 

    public class ConfirmedEmailHandler : AuthorizationHandler<ConfirmedEmailRequirement> 
    { 
     private readonly UserManager<User> _userManager; 

     public ConfirmedEmailHandler(UserManager<User> userManager) 
     { 
      _userManager = userManager; 
     } 

     protected override async Task HandleRequirementAsync(AuthorizationHandlerContext context, ConfirmedEmailRequirement requirement) 
     { 
      var user = await _userManager.GetUserAsync(context.User); 
      if (user?.EmailConfirmed == true) 
      { 
       context.Succeed(requirement); 
      } 
      else 
      { 
       context.Fail(); 
      } 
     } 
    } 

MISE À JOUR: J'ai remarqué que même si les deux iframe et demande non iframe ont le même cookie de session, la demande non iframe comprend un cookie Core.Identity.Application, la demande iframe ne fonctionne pas. Je ne connais pas la signification de ceci ou de ce qui le cause.

Répondre

2

J'ai finalement réussi à obtenir l'identité de travailler dans un iframe en utilisant les éléments suivants:

services.ConfigureApplicationCookie(options => { 
    options.Cookie.Name = "MyAuthCookie"; 
    options.Cookie.SameSite = SameSiteMode.None; //<THIS!!! 
}); 

espère que cela va quelqu'un beaucoup de gratter la tête un jour.