Code flow中Nonce cookie未返回,返回.AspNetCore.Identity.Application报IDX21323错误
IDX21323错误排查与修复方案
IDX21323错误触发的核心是OIDC中间件发起授权请求时生成的nonce对应cookie,在回调时没有被正确携带回客户端,导致中间件无法匹配id_token中的nonce值完成校验。你观察到的.AspNetCore.Identity.Application是服务端Identity生成的会话cookie,不应该出现在客户端回调请求中,本质是服务端、客户端的cookie配置和OIDC配置不匹配导致,可按以下步骤排查:
一、OpenIddict服务端(.NET Core 3.1)配置排查
- 检查cookie作用域配置:确认OpenIddict颁发cookie的
Domain、Path属性没有被错误设置为覆盖客户端域名,避免服务端的Identity会话cookie被意外发送到客户端站点 - 核对客户端注册配置:在OpenIddict的客户端注册逻辑中,确保对应MVC5客户端的
RedirectUri配置和客户端实际回调地址signin-sevanidentity完全一致,无协议、域名、端口、路径的差异 - 限制服务端cookie下发范围:如果服务端不需要和客户端共享会话,在Identity配置中设置
Cookie.SameSite为SameSiteMode.Lax,且明确指定Cookie的Domain仅作用于服务端域名,避免跨域下发服务端Identity cookie到客户端
二、ASP.NET MVC5客户端(.NET Framework 4.8)配置排查
- 修正OIDC中间件的cookie管理器:确认
OpenIdConnectAuthenticationOptions中CookieManager使用的是SystemWebCookieManager,而非默认的OWIN cookie管理器,.NET Framework下OWIN和ASP.NET管道的cookie共享问题会直接导致nonce cookie无法被正确写入和读取,参考配置:
app.UseOpenIdConnectAuthentication(new OpenIdConnectAuthenticationOptions { // 其余业务配置省略 CookieManager = new SystemWebCookieManager() });
- 核对SameSite配置兼容性:确认客户端站点的SameSite配置和服务端匹配,.NET Framework 4.8默认支持SameSite属性,如果服务端返回的nonce cookie的SameSite设置为
Strict,跨站跳转时会被浏览器拦截,导致回调时不携带 - 清理冲突的身份验证配置:确认客户端没有同时启用Forms身份验证和OIDC身份验证,避免不同身份验证模块的cookie逻辑冲突,覆盖OIDC生成的nonce cookie
- (临时规避方案)如果业务场景确实不需要nonce校验,可以设置
ProtocolValidator.RequireNonce = false直接关闭校验,不建议长期使用该方案
验证流程
调整配置后清理浏览器所有相关域名的cookie,再重新发起登录流程:
- 触发授权跳转时,在浏览器开发工具的Application面板查看客户端域名下是否生成了格式为
OpenIdConnect.nonce.*的cookie - 跳转回回调地址时,查看请求头中是否携带了上述nonce cookie,未携带
.AspNetCore.Identity.Application这类服务端cookie - 校验通过后不再抛出
IDX21323错误即为修复完成
内容的提问来源于stack exchange,提问作者Mitch Garner
相关产品推荐
相关产品推荐

