代码流中未返回 Nonce cookie,而是返回了 .AspNetCore.Identity.Application cookie

Posted

技术标签:

【中文标题】代码流中未返回 Nonce cookie,而是返回了 .AspNetCore.Identity.Application cookie【英文标题】:Nonce cookie not being returned in Code flow, .AspNetCore.Identity.Application cookie returned instead 【发布时间】:2022-01-08 12:46:19 【问题描述】:

我们已将运行 openiddict 的应用程序和有问题的客户端应用程序分别升级到 .net core 3.1 和 .net framework 4.8。 Openiddict 也更新到 3.1.0

自从这次更新,以及由此产生的两个项目的变化,我们的 .net 框架 asp.net mvc 5 应用程序开始出现异常 IDX21323:RequireNonce 是“System.Boolean”。 OpenIdConnectProtocolValidationContext.Nonce 为空,OpenIdConnectProtocol.ValidatedIdToken.Payload.Nonce 不为空。无法验证随机数。如果您不需要检查 nonce,请将 OpenIdConnectProtocolValidator.RequireNonce 设置为“false”。请注意,如果找到“nonce”,则会对其进行评估。

在检查从我们的连接/授权端点返回到客户端应用程序的登录回调(称为 signin-sevanidentity)的重定向请求后,我们看到它并没有像我们在生产实例中看到的那样接收到 OpenIdConnect.nonce 的 cookie。客户端无法识别的 AspNetCore.Identity.Application

更新版本中的回调: OpenIdConnect.nonce Header Info

工作生产实例中的回调: ProductionHeaderInfo

不确定我是否弄乱了 openiddict、客户端或两者中的配置。

【问题讨论】:

【参考方案1】:

我找到了解决这个特定问题的方法。根本原因是因为我在客户端的 OpenIdConnect 配置中使用了不正确的响应类型。我使用的是“code id_token”而不是“code”

当我去修改 OpenIdConnectResponseType 枚举值时,我发现代码不是其中之一,只有 2 个选项。

原来我错误地安装了一个不需要的包,它覆盖了扩展。 Microsoft.IdentityModel.Protocol.Extensions 由“Microsoft Corporation”而非“Microsoft”发布

Nuget Package name and version

卸载此包后,我能够按预期添加代码响应类型。

【讨论】:

以上是关于代码流中未返回 Nonce cookie,而是返回了 .AspNetCore.Identity.Application cookie的主要内容,如果未能解决你的问题,请参考以下文章

Go中未定义的返回类型

web3.eth.sendSignedTransaction() 总是返回“返回错误:nonce 太低”

在 OAuth 2.0 隐式流中验证​​ nonce 的位置?

如何在Jmeter中获取'authorization'标头的oauth_signature和oauth_nonce值

抖音__ac_signature

JS反混淆——构造可知DeviceTokennouce与token