使用JWT 身份验证在 ASP.NET Core 中构建安全的 REST API

本文详细介绍了如何在ASP.NET Core中利用JWT进行REST API的身份验证,包括JWT令牌的原理、安装配置、数据库迁移、用户注册、令牌生成及安全访问API的方法。同时,提到了REST API的安全设计最佳实践。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

介绍

在本文中,我们使用JWT 身份验证在 ASP.NET Core 中构建安全的 REST API 。我们从 JWT 的本质及其结构开始。

文章的第 1 - 4 节 解释了什么是 JWT 令牌、如何使用 .Net Core 设置它、安装所需的包、创建应用程序模型、迁移和更新数据库

第 5 - 9 节 重点介绍生成安全 JWT 令牌、使用和不使用生成的令牌进行安全调用以及注册用户。已使用 Postman 测试和触发 Web 请求以保护 API。

  1. JWT 结构

请参阅下面的 JWT 令牌。它在下面被分解和解释为标题、有效载荷、签名,

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiI1Njc3OCIsIm5hbWUiOiJSYWp1IEt1bWFyIiwiaWF0IjozNDU2Njd9.eJBP0IBy20JT9iwP6pHiKkFfHcbMPg_gVYKH-e5j0qk

标题

提供有关令牌 (JWT) 类型和用于签署令牌的算法(例如 RSA、SHA256)的详细信息。在上面的例子中,它是,

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9

有效载荷

包含用户详细信息,也称为声明,这是要保护的数据。在上面的例子中,它是,

eyJzdWIiOiI1Njc3OCIsIm5hbWUiOiJSYWp1IEt1bWFyIiwiaWF0IjozNDU2Njd9

签名

标头、有效载荷和密钥之间的加密。在上面的例子中,它是,

eJBP0IBy20JT9iwP6pHiKkFfHcbMPg_gVYKH-e5j0qk
  1. 让我们从安装必需的包开始

使用 API 模板创建一个新的 ASP.NET Core 应用程序并安装以下包。目标框架是3.1及以上。

Install-Package Microsoft.AspNetCore.Authentication.JwtBearer
Install-Package Microsoft.AspNetCore.Identity.EntityFrameworkCore
Install-Package Microsoft.EntityFrameworkCore
Install-Package Microsoft.EntityFrameworkCore.Design
Install-Package Microsoft.EntityFrameworkCore.SqlServer
Install-Package Microsoft.EntityFrameworkCore.Tools
Install-Package Microsoft.VisualStudio.Web.CodeGeneration.Design
Install-Package System.IdentityModel.Tokens.Jwt

3(一)。如图所示在代码中配置JWT

将以下内容添加到 appsettings.json,

"JWT": {
   
   
    "key": "C1CF4B7DC4C4175B6618DE4F55CA4",
    "Issuer": "MySecureRestApi",
    "Audience": "AsecureRestApiUser",
    "DurationInMinutes": 20
}

为上述设置创建一个相应的类,即 Settings/JWT.cs ,它将用于使用 ASP.NET Core 的 IOptions 功能从我们之前创建的 appsettings.json 的 JWT 部分读取数据。

public class JWTSettings {
   
   
    public string Key {
   
   
        get;
        set;
    }
    public string Issuer {
   
   
        get;
        set;
    }
    public string Audience {
   
   
        get;
        set;
    }
    public double DurationInMinutes {
   
   
        get;
        set;
    }
}

然后,将以下类添加到您的项目中:

DbContext - 在 appsettings.json 中添加连接字符串
源自 IdentityUser 的 ApplicationUser
3(b)。如图所示在代码中配置JWT

要配置身份验证,请将代码添加到 ConfigureServices 方法,如下所示 -

public void ConfigureServices(IServiceCollection services) {
   
   
    Line 1 //The JWT Configuration from AppSettings
    services.Configure < JWTSettings > (_configuration.GetSection("JWT"));
    //The User Manager Service
    services.AddIdentity < ApplicationUser, IdentityRole > ().AddEntityFrameworkStores < ApplicationDbContext > ();
    services.AddScoped < IUserService, UserService > ();
    //Adding DB Context with MSSQL
    services.AddDbContext < ApplicationDbContext > (options => options.UseSqlServer(_configuration.GetConnectionString("DefaultConnection"), b => b.MigrationsAssembly(typeof(ApplicationDbContext).Assembly.FullName)));
    //The JWT Athentication
    services.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值