OIDC SameSite Secure 问题

OIDC SameSite Secure 问题

OpenIDConnect 报错 “Correlation failed.”

描述

ASP.NET Core 中使用 OpenIDConnect 连接到 IdentityServer4 ,在登录回调 /signin-oidc 时,报错 Correlation failed.

原因

浏览器的 SameSite 安全策略 Secure 导致 Cookie 不能被设置。

解决

将 Cookie 的 Secure 属性设置为 True,在 ASP.NET Core 中的代码为:

1
2
3
4
services.Configure<CookiePolicyOptions>(options =>
{
options.Secure = CookieSecurePolicy.Always;
});

或者

1
2
3
4
services.Configure<CookiePolicyOptions>("命名实例", options =>
{
options.Secure = CookieSecurePolicy.Always;
});

或者

1
2
3
4
5
6
7
8
services.AddAuthentication( options = >
{
options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
})
.AddCookie( options =>
{
options.Secure = CookieSecurePolicy.Always;
});

然后一定要记得调用 cookie 策略中间件:

1
2
// 在 UseAuthentication 或任何其他写入 cookie 的东西之前。
app.UseCookiePolicy();

https://docs.microsoft.com/zh-cn/aspnet/core/security/samesite?view=aspnetcore-5.0