这两天网上闲逛的时候,看到一个.NET的轻量级JWT库LitJWT,LitJWT号称主要关注性能,能提升至少5倍的编码/解码速度,以及更少的配置!
LitJWT支持的平台为netstandard 2.1或net5.0更高。
LitJWT宣传的性能对比图:

使用方法:
1、安装依赖:
PM> Install-Package LitJWT
2、使用:
// Get recommended-size random key.
var key = HS256Algorithm.GenerateRandomRecommendedKey();
// Create encoder, JwtEncoder is thread-safe and recommend to store static/singleton.
var encoder = new JwtEncoder(new HS256Algorithm(key));
// Encode with payload, expire, and use specify payload serializer.
var token = encoder.Encode(new { foo = "pay", bar = "load" }, TimeSpan.FromMinutes(30));
// Create decoder, JwtDecoder is also thread-safe so recommend to store static/singleton.
var decoder = new JwtDecoder(encoder.SignAlgorithm);
// Decode and verify, you can check the result.
var result = decoder.TryDecode(token, out var payload);
if (result == DecodeResult.Success)
{
Console.WriteLine((payload.foo, payload.bar));
}
自定义序列化:
在默认情况下。LitJWT 使用System.Text.Json.JsonSerializer进行序列号。 如果你想使用自定义JsonSerializerOptions的话,JwtEncoder与JwtDecoder有JsonSerializerOptions serializerOptions构造函数的重载。
如果你想使用另一个序列化器,编码方法接收Action<T, JwtWriter> payloadWriter。您必须调用writer.Write(ReadOnlySpan<byte> payload)方法来序列化。ReadOnlySpan<byte>必须是 Utf8 。
这是使用 JSON.NET 的示例,这有编码开销。
var token = encoder.Encode(new PayloadSample { foo = "pay", bar = "load" }, TimeSpan.FromMinutes(30),
(x, writer) => writer.Write(Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(x))));
解码方法接收delegate T PayloadParser<T>(ReadOnlySpan<byte> payload)。ReadOnlySpan<byte>是utf8 json。基于 utf8 的序列化是最好的,虽然也可以使用 JSON.NET(但有编码损失)。
var result = decoder.TryDecode(token, x => JsonConvert.DeserializeObject<PayloadSample>(Encoding.UTF8.GetString(x)), out var payload);
总结:
没有了。下次再会!
下载:
github:https://github.com/Cysharp/LitJWT
如果你不方便使用github,点击下方公众号卡片,关注我,回复litjwt直接下载!














![[附源码]JAVA毕业设计远程教学系统录屏(系统+LW)](https://img-blog.csdnimg.cn/f9178a2f862b4a259df59fd2c6662d50.png)



![[附源码]Python计算机毕业设计Django超市商品管理](https://img-blog.csdnimg.cn/28127a44e63d4c1ebc03152c3581226c.png)
