学习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.youkuaiyun.com/x1234w4321/article/details/140316485

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值