C# или VB проверяют JWT вручную созданным JWK

Схожу с ума, потому что я получаю "IDX10511: Проверка подписи не удалась. Ключи пытались...", когда я пытаюсь выполнить проверку в соответствии с ниже. Я пробовал прямой JsonWebKey и преобразование в RSA с той же ошибкой. Вручную проверил токен и JWK в JavaScript:

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

0 ответов

В моем случае ошибка была вызвана неверным значением в aud поле JWT. Убедитесь, что это так же, как действительная аудитория.

Другие вопросы по тегам