.NET 8.0 中使用 JWT(JSON Web Token)进行身份验证和授权

在 .NET 8.0 中使用 JWT(JSON Web Token)进行身份验证和授权,通常需要以下几个步骤:

安装必要的 NuGet 包:

Microsoft.AspNetCore.Authentication.JwtBearer
配置 JWT 认证:

在 Program.cs 或 Startup.cs 中配置 JWT 认证。
生成和验证 JWT:

创建一个方法来生成 JWT。
在控制器中使用 JWT 进行身份验证。
以下是一个简单的示例:

  1. 安装 NuGet 包
    在项目目录中运行以下命令来安装必要的 NuGet 包:

dotnet add package Microsoft.AspNetCore.Authentication.JwtBearer
CopyInsert
2. 配置 JWT 认证
在 Program.cs 中配置 JWT 认证:

using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.IdentityModel.Tokens;
using System.Text;

var builder = WebApplication.CreateBuilder(args);

// 添加 JWT 认证服务
builder.Services.AddAuthentication(options =>
{
options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
}).AddJwtBearer(options =>
{
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuer = true,
ValidateAudience = true,
ValidateLifetime = true,
ValidateIssuerSigningKey = true,
ValidIssuer = builder.Configuration["Jwt:Issuer"],
ValidAudience = builder.Configuration["Jwt:Audience"],
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(builder.Configuration["Jwt:Key"]))
};
});

builder.Services.AddControllers();

var app = builder.Build();

// 启用认证和授权中间件
app.UseAuthentication();
app.UseAuthorization();

app.MapControllers();

app.Run();
CopyInsert
3. 生成和验证 JWT
创建一个方法来生成 JWT:

using Microsoft.IdentityModel.Tokens;
using System.IdentityModel.Tokens.Jwt;
using System.Security.Claims;
using System.Text;

public string GenerateJwtToken(string userId, string issuer, string audience, string key)
{
var securityKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(key));
var credentials = new SigningCredentials(securityKey, SecurityAlgorithms.HmacSha256);

var claims = new[]
{
new Claim(JwtRegisteredClaimNames.Sub, userId),
new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString())
};
var token = new JwtSecurityToken(
issuer: issuer,
audience: audience,
claims: claims,
expires: DateTime.Now.AddMinutes(30),
signingCredentials: credentials);
return new JwtSecurityTokenHandler().WriteToken(token);

}
CopyInsert
在控制器中使用 JWT 进行身份验证:

[ApiController]
[Route("api/[controller]")]
public class AuthController : ControllerBase
{
private readonly IConfiguration _configuration;

public AuthController(IConfiguration configuration)
{
_configuration = configuration;
}
[HttpPost("login")]
public IActionResult Login([FromBody] LoginModel model)
{
// 验证用户凭据
if (model.Username == "validUser" && model.Password == "validPassword")
{
var token = GenerateJwtToken(model.Username, _configuration["Jwt:Issuer"], _configuration["Jwt:Audience"], _configuration["Jwt:Key"]);
return Ok(new { token });
}
return Unauthorized();
}

}

public class LoginModel
{
public string Username { get; set; }
public string Password { get; set; }
}
CopyInsert
4. 配置 appsettings.json
在 appsettings.json 中添加 JWT 配置:

{
"Jwt": {
"Key": "your_secret_key_here",
"Issuer": "your_issuer",
"Audience": "your_audience"
}
}
这样,你就可以在 .NET 8.0 中使用 JWT 进行身份验证和授权了。

posted @   一个人走在路上  阅读(1492)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
点击右上角即可分享
微信分享提示