IDX21323:RequireNonce 为“[PII 已隐藏]”。OpenIdConnectProtocolValidationContext.Nonce 为 null,ValidatedIdToken.Payload.Nonce 不为 null

Bor*_*sov 4 asp.net-mvc nonce openid-connect identityserver4

我有一个 ASSP.NET MVC Web 应用程序MyWebApp,它不允许匿名访问任何页面。有一个IdentityServer4配置,一旦用户尝试打开MyWebApp,他就会被重定向到 IdentityServer 登录页面。(混合流)用户不会登录并在 IdentityServer 登录页面上停留足够长的时间,因此Noncecookie 会MyWebApp过期(默认生存期为 15 分钟)。如果他继续在 IdentityServer 中登录(成功)并被重定向回MyWebApp,他会收到以下错误:

Microsoft.IdentityModel.Protocols.OpenIdConnect.OpenIdConnectProtocolInvalidNonceException IDX21323:RequireNonce 为“[PII 已隐藏]”。OpenIdConnectProtocolValidationContext.Nonce 为 null,OpenIdConnectProtocol.ValidatedIdToken.Payload.Nonce 不为 null。无法验证随机数。如果不需要检查随机数,请将 OpenIdConnectProtocolValidator.RequireNonce 设置为“false”。请注意,如果找到“随机数”,则会对其进行评估。

但由于用户已在 IdentityServer 中成功进行身份验证,因此当他尝试MyWebApp再次访问时,他会被重定向到IdentityServer并返回MyWebApp,而无需再次输入用户名/密码。然而最初的错误很烦人。当“登录”流程开始并且用户“AFK”时间足够长,以至于“Nonce”cookie 过期并且他无法完成最终验证时,有人遇到过这样的问题吗?处理这种情况的好方法是什么?

提前致谢!

小智 7

该错误告诉您,您从toIDX21323: RequireNonce is '[PII is hidden]'发出请求时所在的 URL 与身份验证后将您重定向到的 URL 不同。MyWebAppIdentityServerIdentityServer

MyWebApp我在监听多个 URL时遇到了此错误。例如,用户将连接到www.MyWebApp.com. 他会点击Login并被重定向到IdentityProvider。他会登录,IdentityProvider然后向他发出一个 cookie,证明他的身份www.MyWebApp.com。但是,IdentityProvider would then redirect him to my authentication endpoint (which I specified in my app) at MyWebApp.com . The change in the URL meant that his cookie was inaccessible to MyWebApp.com` 和应用程序会抛出错误。

当我刷新页面时,我已经进入了MyWebApp.com。现在,当他点击 时Login,他将被重定向到IdentityProvider。因为他已经在那里登录,所以会生成一个cookie并给予MyWebApp.com(这与用户上次连接时不同www.MyWebApp.com)。当IdentityProvider发布到我的身份验证端点时,应用程序可以访问 cookie,并且用户已成功登录。

TL;博士。IdentityProvider用户连接的 URL 必须与身份验证成功后重定向到的 URL 完全匹配。根据您的应用程序的配置方式,将应用不同的 cookie 规则。就我而言,加密(http 与 https)或子域(www 与 no-www)的差异导致用户似乎IDX21323 error PII is hidden随机拥有

在此输入图像描述