为什么在iframe中使用.net core 2 AuthorizationHandler时身份为null

时间:2017-08-31 14:27:03

标签: c# iframe asp.net-core authorization asp.net-core-2.0

我在DI注册了以下AuthorizationRequirementAuthorizationHandler,工作正常。但是,当在iframe(同一来源)中调用[Authorize(Policy = "ConfirmedEmail")]的操作时,context.User.Identity.Name总是为NULL,因此user也是如此。有谁知道为什么会这样,更重要的是如何解决它?

当直接调用完全相同的操作(在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();
            }
        }
    }

更新: 我注意到虽然iframe和非iframe请求都具有相同的会话Cookie,但非iframe请求包含Core.Identity.Application Cookie,而iframe请求则不包含let translation = pan.translation(in: pan.view!) Cookie。我不知道这个或其原因的重要性。

1 个答案:

答案 0 :(得分:4)

我终于设法使用以下内容在iframe中工作:

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

希望有一天这会让很多人感到头疼。