【问题标题】:Best approach to intermittent "the nonce was null" error间歇性“nonce 为空”错误的最佳方法
【发布时间】:2020-06-20 21:42:51
【问题描述】:

我有一个 ASP.NET 应用程序,它使用单独的身份提供程序(使用 OpenID Connect 协议)验证用户。

用户抱怨一个间歇性错误:

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

用户遇到此错误,然后发现他们是否再次尝试登录过程是否有效。

我可以通过启动登录过程来重现此错误,并在身份提供者页面上清除前缀为 OpenIdConnect.nonce. 的 cookie

错误消息建议将 OpenIdConnectProtocolValidator.RequireNonce 设置为 false。我认为这是一个不能令人满意的解决方案,因为它会使网站容易受到重放攻击。

网站是否有“最佳实践”方式来优雅地处理此错误?

【问题讨论】:

    标签: asp.net-mvc openid-connect


    【解决方案1】:

    有时你只需要不优雅的解决方案。

    我只是显示一个错误,并要求用户再试一次。

    我怀疑一般用户会阅读“登录错误”这个词,阅读第一句话的一半,然后不假思索地点击按钮。

    【讨论】:

      【解决方案2】:

      我们认为我们的问题是间歇性问题,但结果只是来自 Word、Excel、PowerPoint 等 Office 应用程序的链接。我在 web.config 文件中添加了一个重写规则,错误立即消失了:

      <rule name="WordBypass" enabled="true" stopProcessing="true">
          <match url=".*" />
          <conditions>
              <add input="{HTTP_USER_AGENT}" pattern="Word|Excel|PowerPoint|ms-office" />
          </conditions>
          <action type="CustomResponse" statusCode="200" statusReason="Refresh" statusDescription="Refresh" />
      </rule>
      

      【讨论】:

        猜你喜欢
        • 2016-05-20
        • 1970-01-01
        • 2023-03-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-11
        • 2012-08-11
        • 1970-01-01
        相关资源
        最近更新 更多