1、定义:
JWT(Json Web Token)是现在流行的一种对 Restful 接口进行验证的机制的基础
2、JWT 的 特点:
2.1、把用户信息放到一个 JWT 字符串中,用户信息部分是明文的,再加上一部分签名区 域,签名部分是服务器对于“明文部分+秘钥”加密的,这个加密信息只有服务器端才能解 析。
2.2、用户端只是存储、转发这个 JWT 字符串。如果客户端篡改了明文部分,那么服务器端 解密时候会报错。
3、用 JWT 做权限验证的好处:
3.1、无状态,更有利于分布式系统,不需要集中的 Session 机制 服务器
3.2、可以在 nginx、CDN 等静态文件处理服务器上校验权限;获取用户信息直接从 JWT 中就可以读取,效率高
一、创建一个JwtTest控制台项目
1.1 添加Nuget包(jwt)
1.2 在Program类中实现加密的代码
//加密的数据
var payload = new Dictionary<string, object>
{
{ "UserId", 123 },
{ "UserName", "admin" }
};
//加密的密钥
var secret = "GQDstcKsx0NHjPOuXOYg5MbeJ1XT0uFiwDVvVBrk";//不要泄露
//jwt算法加密
IJwtAlgorithm algorithm = new HMACSHA256Algorithm();
IJsonSerializer serializer = new JsonNetSerializer();
IBase64UrlEncoder urlEncoder = new JwtBase64UrlEncoder();
IJwtEncoder encoder = new JwtEncoder(algorithm, serializer, urlEncoder);
var token = encoder.Encode(payload, secret);
Console.WriteLine(token);
1.3 在Program类中实现解密的代码
//解密
var token ="eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJVc2VySWQiOjEyMywiVXNlck5hbWUiOiJhZG1pbiJ9.Qjw1epD5P6p4Yy2yju3-fkq28PddznqRj3ESfALQy_U";
var secret = "GQDstcKsx0NHjPOuXOYg5MbeJ1XT0uFiwDVvVBrk";
try
{
IJsonSerializer serializer = new JsonNetSerializer();
IDateTimeProvider provider = new UtcDateTimeProvider();
IJwtValidator validator = new JwtValidator(serializer, provider);
IBase64UrlEncoder urlEncoder = new JwtBase64UrlEncoder();
IJwtDecoder decoder = new JwtDecoder(serializer, validator, urlEncoder);
var json = decoder.Decode(token, secret, verify: true);
Console.WriteLine(json);
}
catch (FormatException)
{
Console.WriteLine("Token format invalid");
}
catch (TokenExpiredException)
{
Console.WriteLine("Token has expired");
}
catch (SignatureVerificationException)
{
Console.WriteLine("Token has invalid signature");
}
版权声明:本文为weixin_45408840原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。