2

我的 webapi 中有一个用户信息端点,它受[Authorize]cookie 身份验证保护。如果指定的 cookie 不存在,则用户将被重定向到/account/login,如下所示。

var WindowsAuthenticationSchemeName = Microsoft.AspNetCore.Server.IISIntegration.IISDefaults.AuthenticationScheme;

try
{
    var result = await HttpContext.AuthenticateAsync(WindowsAuthenticationSchemeName);
    if (!(result?.Principal is WindowsPrincipal wp)) { throw new InvalidCredentialException("Expected windows principal"); }

    var claims = Build_Claim_Set_Here;
    var id = new ClaimsIdentity(claims, WindowsAuthenticationSchemeName);

    await HttpContext.SignInAsync(new ClaimsPrincipal(id));

    return Redirect(returnUrl);
}
catch (Exception ex)
{
  return Challenge(WindowsAuthenticationSchemeName);
}

请注意,我没有在SignInAsync请求中指定任何方案名称。由于我的默认身份验证方案是 cookie 方案,我希望在此处使用它。之后重定向响应被发送到浏览器(在这种情况下,returnUrl将是用户信息端点。Windows 身份验证(在浏览器中带有提示),并且重定向到用户信息端点工作得很好。

问题是发送到浏览器的 cookie 没有保存在浏览器中,因此没有与后续请求一起发送。存储在 cookie 中的声明对于用户信息端点是必不可少的。请注意,cookie 在浏览器的响应头中可见,并且大小远低于 4096 字节,这通常是 cookie 大小的上限。因此,我不清楚为什么浏览器不保存 cookie。

有什么我想念的吗?

更新:我的错,原来是域名拼写错误。由于 cookie 是同站点 cookie,cookie 既不会为应用程序保存,也不会随后续请求一起发送。

4

0 回答 0