gpt4 book ai didi

c# - 为什么在 iframe 中使用 .net core 2 AuthorizationHandler 时身份为空

转载 作者:行者123 更新时间:2023-11-30 20:29:35 34 4
gpt4 key购买 nike

我有以下 AuthorizationRequirementAuthorizationHandler 已向 DI 注册并且工作正常。但是,当在 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 请求都具有相同的 session cookie,但非 iframe 请求包含一个 Core.Identity.Application cookie,而 iframe 请求则没有。我不知道这有什么意义,也不知道是什么原因造成的。

最佳答案

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

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

希望有朝一日这可以让人们免去很多头疼的事情。

关于c# - 为什么在 iframe 中使用 .net core 2 AuthorizationHandler 时身份为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45983927/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com