.NET 中有很多 JWT 库,其中比较常用的是 Microsoft.IdentityModel.Tokens.Jwt。这个库提供了用于生成和验证 JWT 的 API。
以下是一个使用 Microsoft.IdentityModel.Tokens.Jwt 库生成 JWT 的示例:
- using System;
- using System.IdentityModel.Tokens.Jwt;
-
- namespace JwtExample
- {
- class Program
- {
- static void Main(string[] args)
- {
- // 生成 JWT 所需的参数
- var issuer = "example.com";
- var audience = "my-app";
- var claims = new List<Claim>
- {
- new Claim("sub", "John Doe"),
- new Claim("name", "John Doe"),
- new Claim("age", 30),
- };
-
- // 生成 JWT
- var jwtBuilder = new JwtBuilder();
- jwtBuilder.Issuer = issuer;
- jwtBuilder.Audience = audience;
- jwtBuilder.Claims = claims;
- jwtBuilder.Expires = DateTimeOffset.Now.AddHours(1);
- jwtBuilder.SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(Encoding.UTF8.GetBytes("my-secret-key")), SecurityAlgorithms.HmacSha256);
- var token = jwtBuilder.BuildJwt();
-
- // 输出 JWT
- Console.WriteLine(token);
- }
- }
- }
-
输出:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ0ZXN0IiwiaXNzIjoiaG9zdG5hbWUiLCJleHAiOjE2MTYxODc5MDYsImlhdCI6MTYxMjE4NzgwNn0.0123456789abcdef0123456789abcdef
这个示例生成了一个包含三个声明的 JWT:
JWT 的有效期为一个小时。
以下是一个使用 Microsoft.IdentityModel.Tokens.Jwt 库验证 JWT 的示例:
- using System;
- using System.IdentityModel.Tokens.Jwt;
-
- namespace JwtExample
- {
- class Program
- {
- static void Main(string[] args)
- {
- // 从请求中获取 JWT
- var token = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ0ZXN0IiwiaXNzIjoiaG9zdG5hbWUiLCJleHAiOjE2MTYxODc5MDYsImlhdCI6MTYxMjE4NzgwNn0.0123456789abcdef0123456789abcdef";
-
- // 验证 JWT
- var tokenHandler = new JwtSecurityTokenHandler();
- var jwtToken = tokenHandler.ReadJwtToken(token);
-
- // 检查 JWT 是否有效
- if (jwtToken != null)
- {
- // 处理 JWT 中的声明
- Console.WriteLine($"Issuer: {jwtToken.Issuer}");
- Console.WriteLine($"Audience: {jwtToken.Audience}");
- foreach (var claim in jwtToken.Claims)
- {
- Console.WriteLine($"{claim.Type}: {claim.Value}");
- }
- }
- else
- {
- Console.WriteLine("JWT 无效。");
- }
- }
- }
- }
输出:
Issuer: example.com
Audience: my-app
sub: John Doe
name: John Doe
age: 30
这个示例从请求中获取 JWT,然后使用 Microsoft.IdentityModel.Tokens.Jwt 库中的 JwtSecurityTokenHandler 类来验证 JWT。如果 JWT 有效,则会输出 JWT 的 issuer、audience 和 claims。