JWT算法
1、定义:JWT(Json Web Token)是现在流⾏的⼀种对 Restful 接⼝进⾏验证的机制的基础
2、JWT 的 特点:
2.1、把⽤户信息放到⼀个 JWT 字符串中,⽤户信息部分是明⽂的,再加上⼀部分签名区 域,签名部分是服务器对于“明⽂部分+秘钥”加密的,这个加密信息只有服务器端才能解 析。
writeline特点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 ="JVc2VySWQiOjEyMywiVXNlck5hbWUiOiJhZG1pbiJ9.Qjw1epD5P6p4Yy2yju3-fkq28PddznqRj3ES 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");
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论