.net - C# 或 VB 使用手动创建的 JWK 验证 JWT
问题描述
发疯,因为我得到“IDX10511:签名验证失败。密钥尝试...”当我尝试按照下面的验证。我已经尝试了一个直接的 JsonWebKey 并转换为 RSA 并产生相同的错误。在 javascript 中手动验证令牌和 JWK。:
Private Sub ValidateTokenAndSetIdentity(token As String)
Dim TokenHandler As New JwtSecurityTokenHandler()
Dim ValidationParameters As TokenValidationParameters = GetValidationParameters()
Dim validToken As Microsoft.IdentityModel.Tokens.SecurityToken
If TokenHandler.CanReadToken(token) Then
Dim ValidKey As New JsonWebKeyConverter
Dim Principal As ClaimsPrincipal = TokenHandler.ValidateToken(token, ValidationParameters, validToken)
Thread.CurrentPrincipal = Principal
HttpContext.Current.User = Principal
End If
End Sub
Private Function GetValidationParameters() As TokenValidationParameters
Dim SecurityKeys As List(Of Microsoft.IdentityModel.Tokens.SecurityKey) = GetSecurityKey()
Dim TVP As New TokenValidationParameters With
{
.ClockSkew = TimeSpan.FromMinutes(5),
.RequireSignedTokens = True,
.RequireExpirationTime = True,
.IssuerSigningKeys = SecurityKeys
}
Return TVP
End Function
Private Function GetSecurityKey() As List(Of Microsoft.IdentityModel.Tokens.SecurityKey)
Dim Key As New JsonWebKey With {
.Kid = "df255eb3e247cf83bac5a6227572f96e",
.Kty = "RSA",
.Alg = "RS256",
.N = "LongValidStringHere",
.E = "ShortValidString"
}
Dim Keys As New List(Of Microsoft.IdentityModel.Tokens.SecurityKey)
Dim e As Byte() = Base64UrlEncoder.DecodeBytes(Key.E)
Dim n = Base64UrlEncoder.DecodeBytes(Key.N)
Dim FullKey As New Microsoft.IdentityModel.Tokens.RsaSecurityKey(New RSAParameters With {.Exponent = e, .Modulus = n}) With
{
.KeyId = Key.Kid
}
Keys.Add(FullKey)
Return Keys
End Function
解决方案
aud
就我而言,错误是由JWT 字段中的无效值引起的。确保它与有效受众相同。
推荐阅读
- python - 如何在张量流中实现图像(二维数组)序列滑动窗口?
- android - 如何禁用底部导航视图中的选项卡?
- dart - ListView 是 Dart 单条记录/结果的理想选择吗?
- mysql - 如何计算复杂查询中列中相同值的数量?
- flutter - 有没有办法在颤动中检查互联网连接的强度?
- arrays - 另一个数组中的数组
- java - 将一堆常量字符串(键)与 Map 进行比较的最佳方法
- cron - 如何在 RHEL 7.2 上的最后一天运行 cron
- laravel - 如何在 Laravel 中包含复杂的 Vue 应用程序
- python - 删除直到字符串中的特定字符(Python)