JwtSecurityTokenHandler和TokenValidationParameters

时间:2014-09-05 20:50:11

标签: c# validation security jwt identity

我以前有Microsoft.IdentityModel.Tokens.JWT的引用,一切正常。

我更新了使用新的System.IdentityModel.Tokens.Jwt,但现在似乎没有任何效果。它找不到ValidateToken的{​​{1}}方法,而JwtSecurityTokenHandler没有TokenValidationParametersAllowedAudienceSigningToken属性。

我在这里缺少什么?任何人都可以提供JWT验证的工作样本吗?

我的“旧”代码:

ValidateExpiration

1 个答案:

答案 0 :(得分:33)

经过大量的研究和测试后,我终于发现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命名空间中。不要忘记添加包#34; JSON Web Token Handler For the Microsoft .Net Framework 4.5&#34; (当我写这些行时版本4.0.0)。

希望它可以节省几个小时的搜索你们中的一些人!