2017-08-31 106 views
0

我有以下AuthorizationRequirementAuthorizationHandler,這是在DI中註冊並且工作得很好。但是,如果在iframe(同一來源)內調用[Authorize(Policy = "ConfirmedEmail")]的操作,則context.User.Identity.Name全是NULL,因此user也是如此。有誰知道這是爲什麼,更重要的是如何解決它?爲什麼當在iframe中使用.net core 2 AuthorizationHandler時身份爲空

當直接調用完全相同的動作(在iframe之外)時,context.User.Identity.Name是正確的,並且用戶查找成功。

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

UPDATE: 我注意到,雖然這兩個iframe和非iframe的請求具有相同的會話cookie,非IFRAME請求包括Core.Identity.Application餅乾,iframe的請求不。我不知道這個或者是什麼導致它的意義。

回答

2

我終於設法得到認同使用iframe內工作如下:

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

希望這樣可以節省別人很多頭部劃傷的一天。

相關問題