.NetCore——JWT加密
一、介绍
JSON Web令牌(JWT)是一个开放标准(RFC 7519),它定义了一种紧凑且自包含的方式,用于在各方之间安全地将信息作为JSON对象传输。由于此信息是经过数字签名的,因此可以被验证和信任。可以使用秘密(使用HMAC算法)或使用RSA或ECDSA的公钥/私钥对对JWT进行签名。(官网复制) 在网上整理了一些资料,简单的使用,下面直接上干货。
二、使用
首先引入包
开始生成令牌,详细看代码注释。
//秘钥
var secret = "This's My First Time Using JWT";
//签发者
var issuer = "QiaoFan";
//接受者
var audience = "TestUser";
//表示生成对称安全密钥
var securityKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(secret));
//签名指定算法
var sigingCredentials = new SigningCredentials(securityKey, SecurityAlgorithms.HmacSha256);
//自定义payload
var claims = new Claim[] {
new Claim("UserId",Guid.NewGuid().ToString()),
new Claim("Name","TestUser")
};
//组成令牌数据
var securtityoken = new JwtSecurityToken(
issuer: issuer,
audience: audience,
claims: claims,
signingCredentials: sigingCredentials,
expires: DateTime.Now.AddMilliseconds(30)
);
//生成令牌
var token = new JwtSecurityTokenHandler().WriteToken(securtityoken);
秘钥解析
//生成令牌
var token = new JwtSecurityTokenHandler().WriteToken(securtityoken);
//令牌解析
var handler = new JwtSecurityTokenHandler();
//读取令牌并获取其中的自定义payload
var payload = handler.ReadJwtToken(token).Payload;
//获取Claims对象
var claimss = payload.Claims;
Dictionary<string, string> dc = new Dictionary<string, string>();
claimss.ToList().ForEach(n =>
{
dc.Add(n.Type.ToString(), n.Value.ToString());
});
下面看看效果
生成的令牌在JWT官网也可以进行解析
在这可以看到跟咱们放入的信息是相同的。
接下来看一下咱们解析出来的数据是否准确。
从图中监视看到解析出来的数据没有问题。
这就可以简单的利用JWT的加密方式生成令牌。
在使用的时候可以根据实际的情况,对数据,生成后的令牌 都可以再次进行加密使用。
环境: vs 2019 core3.1