JwtSecurityTokenHandler and TokenValidationParameters

本文关键字:TokenValidationParameters and JwtSecurityTokenHandler | 更新日期: 2023-09-27 18:20:53

我曾经引用过Microsoft.IdentityModel.Tokens.JWT,一切都很好。

我更新为使用新的System.IdentityModel.Tokens.Jwt,但现在似乎什么都不起作用。它找不到JwtSecurityTokenHandlerTokenValidationParametersValidateToken方法没有AllowedAudienceSigningTokenValidateExpiration属性。

我在这里错过了什么?有人能提供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();
}

JwtSecurityTokenHandler and TokenValidationParameters

经过大量的研究和测试,我终于发现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命名空间中。不要忘记添加包"用于Microsoft.Net Framework 4.5的JSON Web令牌处理程序"(在我写这些行的时候是4.0.0版本)。

希望它能为你们中的一些人节省几个小时的搜索时间!

相关文章:
  • 没有找到相关文章