JwtSecurityTokenHandler и TokenValidationParameters

Раньше я имел ссылку на Microsoft.IdentityModel.Tokens.JWT, и все работало нормально.

Я обновил, чтобы использовать новый System.IdentityModel.Tokens.Jwt, но теперь ничего не работает. Он не может найти метод ValidateToken JwtSecurityTokenHandler и TokenValidationParameters не имеет свойств AllowedAudience, SigningToken или ValidateExpiration.

Что мне здесь не хватает? Может ли кто-нибудь предоставить рабочий образец проверки JWT с этим?

Мой "старый" код:

private static void ValidateJwt(string jwt)
{
    var handler = new JWTSecurityTokenHandler();
    var validationParameters = new Microsoft.IdentityModel.Tokens.JWT.TokenValidationParameters()
    {
        AllowedAudience = "https://my-rp.com",
        //SigningToken = new BinarySecretSecurityToken(Convert.FromBase64String(myBase64Key)),
        SigningToken = new X509SecurityToken(
           X509
           .LocalMachine
           .My
           .Thumbprint
           .Find("UYTUYTVV99999999999YTYYTYTY88888888", false)
           .First()),
        ValidIssuer = "https://my-issuer.com/trust/issuer",
        ValidateExpiration = true
    };

    try
    {
        var principal = handler.ValidateToken(jwt, validationParameters);
    }
    catch (Exception e)
    {

        Console.WriteLine("{0}\n {1}", e.Message, e.StackTrace);
    }

    Console.WriteLine();
}

Ответы

Ответ 1

После большого количества исследований и тестов я наконец обнаружил, что некоторые имена свойств для TokenValidationParameters были изменены и подписи JwtSecurityTokenHandler.ValidateToken().

Итак, здесь изменена рабочая версия вышеуказанного кода.

private static void ValidateJwt(string jwt)
{
    var handler = new JwtSecurityTokenHandler();   
    var validationParameters = new TokenValidationParameters()
    {
        ValidAudience = "https://my-rp.com",
        IssuerSigningTokens = new List<X509SecurityToken>() { new X509SecurityToken(
           X509
           .LocalMachine
           .My
           .Thumbprint
           .Find("UYTUYTVV99999999999YTYYTYTY88888888", false)
           .First()) },
        ValidIssuer = "https://my-issuer.com/trust/issuer",
        CertificateValidator = X509CertificateValidator.None,
        RequireExpirationTime = true
    };

    try
    {
        SecurityToken validatedToken;
        var principal = handler.ValidateToken(jwt, validationParameters, out validatedToken);
    }
    catch (Exception e)
    {

        Console.WriteLine("{0}\n {1}", e.Message, e.StackTrace);
    }

    Console.WriteLine();
}

И для ссылки, JwtSecurityTokenHandler живет в пространстве имен System.IdentityModel.Tokens. Не забудьте добавить пакет " JSON Web Token Handler для Microsoft.Net Framework 4.5" (версия 4.0.0 в то время, когда я пишу тезисы).

Надеюсь, что это может спасти несколько часов поиска для некоторых из вас, ребята!