我的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身份验证(在浏览器中带有提示),并且重定向到用户信息端点的效果很好。 / p>
问题在于发送到浏览器的cookie不会保存在浏览器中,因此不会与后续请求一起发送。存储在cookie中的声明对于用户信息端点至关重要。请注意,cookie在浏览器的响应头中可见,并且其大小远低于4096字节,这通常是cookie大小的上限。因此,我不清楚为什么浏览器不保存cookie。
有什么我想念的吗?
更新:糟糕,事实证明是域名输入错误。由于该cookie是同一站点的cookie,因此该cookie既不会保存为应用程序 ,也不会随后续请求一起发送。