此问题非常特定于此处的JwtHandler库:JWT Handler NuGet Package
我正在尝试创建一个JWT,使用RSA密钥进行签名以及验证此JWT。但是我似乎无法从jwt中删除“Issuer”变量(“iss”)。如果我不包含它,即使我在TokenValidationParameters中指定“ValidateIssuer = false”,验证也会失败。
我是否可以使用此库,而无需始终指定“iss”变量,或者是否有解决此问题的方法?
答案 0 :(得分:1)
在检查源代码之后,我发现没有办法没有issuer字段,即使标准(RFC7519)将它作为可选项。我通过创建JwtSecurityTokenHandler的子类来解决该问题,并重写方法ValidateToken()以修复那里的发布者。接下来,我将它交给base.ValidateToken()。
我也从同行那里得到了一个问题,为什么我想从jwt令牌中更改或删除发行者,以及这不会影响安全方面。要回答这个问题:我只计划使用公钥/私钥证书来签署已经拥有发行人的jwt令牌。再次检查发行人将做两次工作。
更新的答案 System.Identitymodel.Tokens.Jwt已更新至v5,我强烈建议您更新到此版本。它解决了发行人问题。此更新的缺点是它有一些更多的依赖项(Microsoft.Identitymodel.Tokens,Microsoft.Identitymodel.Logging,Newtonsoft.Json.Linq)并且必须将您的代码重新转发到稍微不同的接口。