在.NET 8 中,从 0 到 1 搭建权限管理系统并使用 JWT(JSON Web Tokens)创建 Token 是一个重要的步骤。以下是一个关于如何在.NET 8 中创建 Token 并使用的指南:
一、了解 JWT
JWT 是一种开放标准(RFC 7519),用于在各方之间安全地传输信息。它由三部分组成:头部(Header)、载荷(Payload)和签名(Signature)。头部和载荷通常是 JSON 对象,签名用于验证 Token 的真实性和完整性。
二、安装必要的包
在.NET 8 项目中,你需要安装以下包来使用 JWT:
Microsoft.AspNetCore.Authentication.JwtBearer
:这个包提供了对 JWT 身份验证的支持。
可以通过 NuGet 包管理器在项目中安装这些包。
三、配置 JWT 服务
- 在项目的
Program.cs
文件中,添加以下代码来配置 JWT 服务:
using Microsoft.AspNetCore.Authentication.JwtBearer; using Microsoft.IdentityModel.Tokens; var builder = WebApplication.CreateBuilder(args); // 配置 JWT builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme) .AddJwtBearer(options => { options.TokenValidationParameters = new TokenValidationParameters { ValidateIssuer = true, ValidateAudience = true, ValidateLifetime = true, ValidateIssuerSigningKey = true, ValidIssuer = "your_issuer", ValidAudience = "your_audience", IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("your_secret_key")) }; }); var app = builder.Build();
在上面的代码中,我们配置了 JWT 身份验证,设置了一些验证参数,如验证颁发者、受众、有效期和签名密钥等。你需要将your_issuer
、your_audience
和your_secret_key
替换为实际的值。
- 在
app.UseAuthentication();
和app.UseAuthorization();
之前添加以下代码,以确保在请求处理管道中启用身份验证和授权:
app.UseAuthentication(); app.UseAuthorization();
四、创建 Token
- 创建一个方法来生成 JWT Token:
using System.IdentityModel.Tokens.Jwt; using System.Security.Claims; using System.Text; // 创建 Token 的方法 public static string GenerateToken(string username, string role) { var claims = new[] { new Claim(ClaimTypes.Name, username), new Claim(ClaimTypes.Role, role) }; var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("your_secret_key")); var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256); var token = new JwtSecurityToken( issuer: "your_issuer", audience: "your_audience", claims: claims, expires: DateTime.UtcNow.AddHours(1), signingCredentials: creds); return new JwtSecurityTokenHandler().WriteToken(token); }
在上面的代码中,我们创建了一个静态方法GenerateToken
,它接受用户名和角色作为参数,并生成一个 JWT Token。你可以根据需要添加更多的 claims。
五、使用 Token
- 在需要进行身份验证的控制器或服务中,可以使用以下方式来验证和解析 Token:
using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using System.IdentityModel.Tokens.Jwt; [Authorize] [ApiController] [Route("[controller]")] public class YourController : ControllerBase { [HttpGet] public IActionResult Get() { var token = Request.Headers["Authorization"].ToString().Replace("Bearer ", ""); var handler = new JwtSecurityTokenHandler(); var jwtToken = handler.ReadJwtToken(token); var username = jwtToken.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Name)?.Value; var role = jwtToken.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Role)?.Value; return Ok($"Hello, {username}! Your role is {role}."); } }
在上面的代码中,我们在控制器方法上使用了[Authorize]
属性,以确保只有经过身份验证的用户才能访问该方法。在方法中,我们从请求头中获取 Token,解析 Token,并获取用户名和角色信息。
通过以上步骤,你可以在.NET 8 中使用 JWT 创建 Token 并进行身份验证和授权。请根据你的实际需求进行调整和扩展。同时,确保保护好你的签名密钥,以防止 Token 被伪造。