雷达智富

首页 > 内容 > 程序笔记 > 正文

程序笔记

.NET JWT库的使用示例

2024-09-13 68

.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:

sub:用户标识符 name:用户姓名 age:用户年龄

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。

更新于:3个月前
赞一波!1

文章评论

评论问答