Duende BFF部署后Firefox丢失关联Cookie引发登录异常
Duende+BFF部署后Firefox登录报"Correlation failed"问题排查与解决
问题概况
- 技术栈:Duende Software + Backend for Frontend(BFF)模式
- 本地验证:Edge/Chrome/Firefox三大浏览器均能正常完成登录流程
- 服务器部署后异常表现:Edge/Chrome登录正常,但Firefox 111.0 64位登录时抛出
Correlation failed错误,服务器日志显示找不到.AspNetCore.Correlation前缀的关联Cookie
客户端核心代码(Program.cs)
var builder = WebApplication.CreateBuilder(args); // 配置BFF服务 builder.Services.AddBff() .AddRemoteApis(); // 配置认证与授权 builder.Services.AddAuthentication(options => { options.DefaultScheme = "cookie"; options.DefaultChallengeScheme = "oidc"; }) .AddCookie("cookie", options => { options.Cookie.Name = "__Host-bff"; options.Cookie.SameSite = SameSiteMode.Strict; options.Cookie.SecurePolicy = CookieSecurePolicy.Always; }) .AddOpenIdConnect("oidc", options => { options.Authority = "https://your-identity-server-domain"; options.ClientId = "bff-client-id"; options.ClientSecret = "bff-client-secret"; options.ResponseType = "code"; options.Scope.Clear(); options.Scope.Add("openid"); options.Scope.Add("profile"); options.Scope.Add("api-access"); options.SaveTokens = true; options.GetClaimsFromUserInfoEndpoint = true; options.NonceCookie.SecurePolicy = CookieSecurePolicy.Always; options.CorrelationCookie.SecurePolicy = CookieSecurePolicy.Always; }); var app = builder.Build(); app.UseHttpsRedirection(); app.UseRouting(); app.UseAuthentication(); app.UseBff(); app.UseAuthorization(); // 映射BFF管理端点 app.MapBffManagementEndpoints(); // 映射远程API路由 app.MapRemoteApi("/api") .RequireAccessToken(); app.Run();
排查过程与根因定位
- 结合日志信息,确认异常触发点为OpenID Connect回调阶段,无法找到关联Cookie
- 对比本地与服务器环境差异,排除代码配置、HTTPS、Cookie策略等因素
- 最终发现服务器系统时间比标准时间滞后2小时:
- 登录流程中生成的
.AspNetCore.Correlation关联Cookie包含精确的过期时间,服务器时间偏差导致Cookie实际已过期 - Firefox严格执行Cookie过期规则,直接删除了过期的关联Cookie,回调时无法匹配关联值,触发
Correlation failed错误 - Edge/Chrome对过期Cookie的处理逻辑相对宽松,未立即删除过期Cookie,因此仍能完成登录流程
- 登录流程中生成的
解决方案
将服务器系统时间同步至当前标准时间(可通过NTP服务自动同步),确保Cookie的过期时间计算准确,解决关联Cookie提前过期的问题。
内容的提问来源于stack exchange,提问作者Brak
相关产品推荐
相关产品推荐

