如果查看https://github.com/jwt-dotnet/jwt,可以使用一行代码JWT.JsonWebToken.Decode(token, secretKey);
解码和验证JWT令牌。我想使用Microsoft提供的JWT库(System.IdentityModel.Tokens.Jwt
),但我无法弄清楚如何完成这个简单的任务。
鉴于JWT令牌和秘密(HS256),我如何解码和验证像该样本或this website那样的JWT?
答案 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()