繁体   English   中英

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

[英]Why is identity null when using .net core 2 AuthorizationHandler in iframe

我有以下向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请求却没有。 我不知道此问题的重要性或原因。

我终于设法使用以下方法在iframe中使用身份:

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

希望这可以节省某人每天挠头的时间。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM