介绍
在本文中,我们使用JWT 身份验证在 ASP.NET Core 中构建安全的 REST API 。我们从 JWT 的本质及其结构开始。
文章的第 1 - 4 节 解释了什么是 JWT 令牌、如何使用 .Net Core 设置它、安装所需的包、创建应用程序模型、迁移和更新数据库
第 5 - 9 节 重点介绍生成安全 JWT 令牌、使用和不使用生成的令牌进行安全调用以及注册用户。已使用 Postman 测试和触发 Web 请求以保护 API。
- JWT 结构
请参阅下面的 JWT 令牌。它在下面被分解和解释为标题、有效载荷、签名,
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiI1Njc3OCIsIm5hbWUiOiJSYWp1IEt1bWFyIiwiaWF0IjozNDU2Njd9.eJBP0IBy20JT9iwP6pHiKkFfHcbMPg_gVYKH-e5j0qk
标题
提供有关令牌 (JWT) 类型和用于签署令牌的算法(例如 RSA、SHA256)的详细信息。在上面的例子中,它是,
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
有效载荷
包含用户详细信息,也称为声明,这是要保护的数据。在上面的例子中,它是,
eyJzdWIiOiI1Njc3OCIsIm5hbWUiOiJSYWp1IEt1bWFyIiwiaWF0IjozNDU2Njd9
签名
标头、有效载荷和密钥之间的加密。在上面的例子中,它是,
eJBP0IBy20JT9iwP6pHiKkFfHcbMPg_gVYKH-e5j0qk
- 让我们从安装必需的包开始
使用 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.