自学内容网 自学内容网

学习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编码的。

在这里插入图片描述

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

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


原文地址:https://blog.csdn.net/gc_2299/article/details/144652012

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!