JwtSecurityTokenHandler和TokenValidationParameters

Pat*_*ote 19 c# security validation identity jwt

我以前有一个参考Microsoft.IdentityModel.Tokens.JWT,一切都很好.

我更新了使用新的System.IdentityModel.Tokens.Jwt但现在似乎没有任何工作.它不能找到ValidateToken的方法JwtSecurityTokenHandlerTokenValidationParameters没有AllowedAudience,SigningTokenValidateExpiration性质.

我在这里错过了什么?任何人都可以提供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();
}
Run Code Online (Sandbox Code Playgroud)

Pat*_*ote 37

经过大量的研究和测试,我终于发现一些属性名称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();
}
Run Code Online (Sandbox Code Playgroud)

并且作为参考,命名空间中的JwtSecurityTokenHandler生命System.IdentityModel.Tokens.不要忘记添加软件包" Microsoft .Net Framework 4.5的JSON Web令牌处理程序" (我编写这些行时的版本4.0.0).

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

  • @ossys .NET 文档已经走下坡路。我发现很难找到有关这些课程的任何信息。太多的尝试和错误。 (5认同)
  • 谢谢你!唉,非常令人沮丧:\与其他框架相比,ASP.NET中的编码一直是一个绝对的噩梦 (2认同)