.NET 5 Web API 中JWT详细教程:保护你的Web应用

  1. 第一部分:

理解JWT

JSON Web Token(JWT)是一种在不同系统之间传递信息的安全方式。它由三部分组成:头部(Header)、载荷(Payload)和签名(Signature)。头部包含加密算法和令牌类型等信息,载荷包含用户的信息,签名用于验证令牌的真实性。

  1. 安装必要的包

在开始之前,我们需要在你的项目中添加一些必要的NuGet包来支持JWT。打开你的Visual Studio或者VS Code,在项目中运行以下命令:

powershell 复制代码
dotnet add package Microsoft.AspNetCore.Authentication.JwtBearer

这个包将帮助我们验证JWT令牌。

  1. 配置认证和授权

在Startup.cs文件的ConfigureServices方法中,添加以下代码来配置认证和授权:

csharp 复制代码
public void ConfigureServices(IServiceCollection services)
{
    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"))
            };
        });

    services.AddAuthorization();
    services.AddControllers();
}

在这里,我们配置了JWT认证的参数,包括验证发行者、接受者、过期时间以及签名等信息。

  1. 生成JWT令牌

在你的登录逻辑中,当用户成功登录后,你需要生成一个JWT令牌并返回给客户端。在你的控制器或服务中,添加以下代码:

csharp 复制代码
using Microsoft.IdentityModel.Tokens;
using System.IdentityModel.Tokens.Jwt;
using System.Security.Claims;
using System.Text;

public IActionResult Login(string username, string password)
{
    // 此处应该验证用户名和密码,为了简化教程,这里省略
    // 假设验证通过,生成JWT令牌

    var tokenHandler = new JwtSecurityTokenHandler();
    var key = Encoding.UTF8.GetBytes("your_secret_key");
    var tokenDescriptor = new SecurityTokenDescriptor
    {
        Subject = new ClaimsIdentity(new Claim[]
        {
            new Claim(ClaimTypes.Name, username),
            // 可以添加更多的用户信息
        }),
        Expires = DateTime.UtcNow.AddDays(1),
        SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(key), SecurityAlgorithms.HmacSha256Signature)
    };
    var token = tokenHandler.CreateToken(tokenDescriptor);
    var tokenString = tokenHandler.WriteToken(token);

    return Ok(new { Token = tokenString });
}

在这里,我们使用用户名和过期时间等信息创建了一个JWT令牌,并使用密钥进行签名。

  1. 保护API

现在,你的API已经可以生成JWT令牌了。为了保护你的API,你需要在需要验证用户身份的地方加上[Authorize]特性。例如:

csharp 复制代码
[Authorize]
public IActionResult MyProtectedAction()
{
    // 只有经过验证的用户才能访问这个方法
    return Ok("You have accessed the protected action.");
}
  1. 测试API

现在你可以使用JWT令牌来测试你的API了。在请求的Header中添加Authorization字段,值为Bearer加上你生成的JWT令牌。如下所示:

vbnet 复制代码
GET /api/myprotectedaction HTTP/1.1
Host: localhost:5000
Authorization: Bearer your_generated_jwt_token

如果JWT令牌是有效的,你就可以成功访问受保护的API。

通过这篇简单的教程,你已经了解了如何在.NET 5 Web API中使用JWT来保护你的Web应用。JWT是一种灵活且安全的认证方式,它可以帮助你验证用户身份并保护你的API免受未授权访问。希望这个教程对你有所帮助,祝你在.NET Core Web开发中取得更多的成功!

相关推荐
苏三说技术11 分钟前
为什么不建议在 Docker 中跑 MySQL?
后端
二饭12 分钟前
Spring Boot 项目启动报错:MongoSocketOpenException 连接被拒绝排查日记
java·spring boot·后端
荣达1 小时前
koa洋葱模型理解
前端·后端·node.js
AAA修煤气灶刘哥2 小时前
Kafka 入门不踩坑!从概念到搭环境,后端 er 看完就能用
大数据·后端·kafka
月小水长2 小时前
大模型接入自定义 MCP Server,我开发了个免费使用的基金涨跌归纳和归因分析的 Agent
人工智能·后端
yinke小琪2 小时前
说说hashCode() 和 equals() 之间的关系
java·后端·面试
花果山最Man的男人2 小时前
@Autowired注解使用说明
后端
京东云开发者2 小时前
如何秒级实现接口间“幂等”补偿:一款轻量级仿幂等数据校正处理辅助工具
后端
会飞的架狗师3 小时前
【MySQL体系】第1篇:从MySQL架构原理到存储的解析
后端·mysql