学习ASP.NET Core的身份认证(基于JwtBearer的身份认证3)

根据参考文献1中JWT Token的组成及计算方式,对照参考文献2中的界面,实现简单的JWT Token解析及验证程序,主要功能包括:
  1)拆分Token字符串,将前两段使用Base64UrlEncoder类解码并转为UTF8字符串(需添加Microsoft.IdentityModel.Tokens包);
  2)调用HmacSha256算法计算Token前两段的Hash值,并转成字符串与Token进行对比验证,注意这里将Hash值转换成字符串时一定要用Base64UrlEncoder,不要用Convert.ToBase64String函数,这两者转换出的字符串还是有些许差异。反编译JwtSecurityTokenHandler().WriteToken函数,最终看到Token最后一段内容是调用Base64UrlEncoder编码的。

主要代码及程序运行效果如下所示:

csharp 复制代码
string[] subString=txtToken.Text.Split('.');
 
txtHeader.Text=Encoding.UTF8.GetString(Base64UrlEncoder.DecodeBytes(subString[0]));
txtPayload.Text = Encoding.UTF8.GetString(Base64UrlEncoder.DecodeBytes(subString[1]));
txtSignature.Text=subString[2];

public static void ComputeHmacSha256(string message, string secret, string originHash)
{
    byte[] keyBytes = Encoding.UTF8.GetBytes(secret);
    byte[] messageBytes = Encoding.UTF8.GetBytes(message);

    using (HMACSHA256 hmac = new HMACSHA256(keyBytes))
    { 
        byte[] hash = hmac.ComputeHash(messageBytes);

        if(string.Equals(originHash, Base64UrlEncoder.Encode(hash)))
        {
            MessageBox.Show("验证成功");
        }
        else
        {
            MessageBox.Show("验证失败");
        } 
    }
} 

参考文献:

[1]https://jwt.io/introduction/

[2]https://jwt.io/#debugger-io

[3]https://blog.csdn.net/x1234w4321/article/details/140316485