.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开发中取得更多的成功!

相关推荐
cainiao080605几秒前
《Spring Boot 4.0新特性深度解析》
java·spring boot·后端
-曾牛12 分钟前
Spring AI 与 Hugging Face 深度集成:打造高效文本生成应用
java·人工智能·后端·spring·搜索引擎·springai·deepseek
菜鸟分享录15 分钟前
MCP 入门实战:用 C# 开启 AI 新篇章
ai·c#·semantic kernel·mcp
南玖yy1 小时前
C/C++ 内存管理深度解析:从内存分布到实践应用(malloc和new,free和delete的对比与使用,定位 new )
c语言·开发语言·c++·笔记·后端·游戏引擎·课程设计
计算机学姐1 小时前
基于SpringBoot的小区停车位管理系统
java·vue.js·spring boot·后端·mysql·spring·maven
BUG制造机.1 小时前
Go 语言 slice(切片) 的使用
开发语言·后端·golang
小鸡脚来咯1 小时前
请求参数:Header 参数,Body 参数,Path 参数,Query 参数分别是什么意思,什么样的,分别通过哪个注解获取其中的信息
java·spring boot·后端
编程乐趣1 小时前
一个用C#开发的记事本Notepads开源编辑器
c#·编辑器·.net
编程乐趣2 小时前
点下4个Winform UI开源控件库
ui·开源·mfc
天上掉下来个程小白3 小时前
添加购物车-02.代码开发
java·服务器·前端·后端·spring·微信小程序·苍穹外卖