如何使用System.IdentityModel.Tokens.Jwt简单地解码JWT

时间:2015-09-06 01:35:01

标签: .net jwt

如果查看https://github.com/jwt-dotnet/jwt,可以使用一行代码JWT.JsonWebToken.Decode(token, secretKey);解码和验证JWT令牌。我想使用Microsoft提供的JWT库(System.IdentityModel.Tokens.Jwt),但我无法弄清楚如何完成这个简单的任务。

鉴于JWT令牌和秘密(HS256),我如何解码和验证像该样本或this website那样的JWT?

2 个答案:

答案 0 :(得分:1)

如果您的密码是基本的64位编码字节数组,这似乎有效。

public static void ValidateJwtWithHs256(String encodedJwt, String base64EncodedSecret, String validAudience, String validIssuer)
{
    var tokenValidationParameters = new TokenValidationParameters
    {
        IssuerSigningToken = new BinarySecretSecurityToken(Base64UrlEncoder.DecodeBytes(base64EncodedSecret)),
        ValidIssuer = validIssuer,
        ValidAudience = validAudience,
    };
    SecurityToken securityToken;
    new JwtSecurityTokenHandler().ValidateToken(encodedJwt, tokenValidationParameters, out securityToken);
}

或者,您可以告诉验证者不要验证某些部分,如下所示:

var tokenValidationParameters = new TokenValidationParameters
{
    IssuerSigningToken = new BinarySecretSecurityToken(Base64UrlEncoder.DecodeBytes(base64EncodedSecret)),
    ValidateAudience = false,
    ValidateIssuer = false,
};

不幸的是,我仍然不知道如何使用不像http://jwt.io那样基本编码的秘密字符串。

答案 1 :(得分:0)

  

不幸的是,我仍然不知道如何使用不像http://jwt.io那样基本编码的秘密字符串。

我没有足够的声誉来评论,所以我会把它放在这里。要使用非base-64编码的机密,只需使用Encoding.UTF8.GetBytes()代替Base64UrlEncoder.DecodeBytes()