C# 隐藏使用RS256 PII的JWT SecurityTokenInvalidSignatureException

C# 隐藏使用RS256 PII的JWT SecurityTokenInvalidSignatureException,c#,jwt,C#,Jwt,请帮忙!使用Microsoft的System.IdentityModel.Tokens.JWT库验证使用RS256签名的JWT令牌时遇到问题 此令牌在上验证得很好 这就是错误: Microsoft.IdentityModel.Tokens.SecurityTokenInvalidSignatureException IDX10503:签名验证失败。已尝试密钥:“[PII已隐藏]”。 捕获的异常: “[PII已隐藏]”。 令牌:“[PII已隐藏]” 这是示例代码(我在System.Identity

请帮忙!使用Microsoft的System.IdentityModel.Tokens.JWT库验证使用RS256签名的JWT令牌时遇到问题

此令牌在上验证得很好

这就是错误:

Microsoft.IdentityModel.Tokens.SecurityTokenInvalidSignatureException IDX10503:签名验证失败。已尝试密钥:“[PII已隐藏]”。 捕获的异常: “[PII已隐藏]”。 令牌:“[PII已隐藏]”

这是示例代码(我在System.IdentityModel.Tokens.Jwt v5.2.2 NuGet包中使用了LinqPad):


最后,我还想知道如何删除[PII是隐藏的],这样我就可以看到错误的更多细节。在app.config甚至machine.config文件中将enableLoggingKnownPii和logKnownPII设置为true似乎没有什么区别。

事实证明,X509SecurityKey的密钥大小长度至少需要1024才能进行验证。这在异常中并不明显,因为它是用[PII is hidden]过滤器隐藏的

添加以下行使异常文本更加有用(添加到
Startup.cs
中的
ConfigureServices
方法):

新的例外文本:

'System.ArgumentOutOfRangeException:IDX10631:用于验证的'Microsoft.IdentityModel.Tokens.X509SecurityKey'不能小于'1024'位。键大小:“512”


将非对称密钥的长度增加到1024解决了此问题。

您可以增加密钥长度,如下面的
appsettings.json
文件所示

"Jwt": {
    "Key": "pintusharmaqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqweqwe",
    "Issuer": "pintusharma.com"
  }

如果您使用的是RSASA256,则大小不应小于2024。否则它会抛出同样的错误。嗨,卡洛,你是如何增加钥匙的长度的?哦,我刚刚弄明白了。我需要做的就是在我的秘密中添加更多的内容/文字。请记住在部署到生产环境时返回默认值
false
。您不希望在生产中使用
ShowPII=true
。增加非对称密钥的长度为我解决了此问题。非常感谢。为我工作:)
IdentityModelEventSource.ShowPII = true;
"Jwt": {
    "Key": "pintusharmaqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqweqwe",
    "Issuer": "pintusharma.com"
  }