
深入解析API网关策略:认证、授权、安全、流量处理与可观测性
在现代 Web 应用中,用户认证和授权是必须要解决的问题。ASP.NET Core 提供了强大的 Identity 框架来管理用户、角色与密码安全,再结合 JWT(JSON Web Token)可实现无状态、高性能的令牌验证。本文从零开始,手把手教你如何在 ASP.NET Core 中安装、配置并运行 Identity 与 JWT 验证。
一个标准的 JWT 由三部分组成:
客户端登录后获取到 JWT,每次请求将它放入 Authorization: Bearer < token >
头,服务器验证签名并提取声明,实现无状态鉴权。
在项目根目录执行或通过 VS Code、自带终端安装:
dotnet add package Microsoft.AspNetCore.Identity.EntityFrameworkCore
dotnet add package Microsoft.EntityFrameworkCore.SqlServer
dotnet add package Microsoft.AspNetCore.Authentication.JwtBearer
新建 Models/AppUser.cs
,继承内置 IdentityUser
,便于后续扩展自定义字段:
public class AppUser : IdentityUser
{
// 可根据业务需求添加更多属性
// public int RiskLevel { get; set; }
}
修改 Data/AppDbContext.cs
,继承自 IdentityDbContext < AppUser >
而非普通 DbContext
:
public class AppDbContext : IdentityDbContext < AppUser >
{
public AppDbContext(DbContextOptions < AppDbContext > options)
: base(options) { }
// 其他 DbSet < TEntity > …
}
builder.Services.AddIdentity < AppUser, IdentityRole > (options = >
{
options.Password.RequireDigit = true;
options.Password.RequireLowercase = true;
options.Password.RequireUppercase = true;
options.Password.RequireNonAlphanumeric = true;
options.Password.RequiredLength = 12;
})
.AddEntityFrameworkStores < AppDbContext > ()
.AddDefaultTokenProviders();
同上 .AddEntityFrameworkStores < AppDbContext > ()
已将 AppDbContext
注入 Identity。
先在 appsettings.json
中增加配置段:
"Jwt": {
"Issuer": "https://localhost:5246",
"Audience": "https://localhost:5246",
"Key": "请替换为至少512位以上的高强度随机密钥"
}
然后在 Program.cs
中:
var jwtSettings = builder.Configuration.GetSection("Jwt");
var key = Encoding.UTF8.GetBytes(jwtSettings["Key"]);
builder.Services
.AddAuthentication(options = >
{
options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
})
.AddJwtBearer(options = >
{
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuer = true,
ValidIssuer = jwtSettings["Issuer"],
ValidateAudience = true,
ValidAudience = jwtSettings["Audience"],
ValidateIssuerSigningKey = true,
IssuerSigningKey = new SymmetricSecurityKey(key)
};
});
app.UseAuthentication();
app.UseAuthorization();
在终端运行:
dotnet ef migrations add AddIdentity
dotnet ef database update
使用 SQL Server Management Studio 或其他工具,可见生成了以下表:
Jwt:Key
必须为高强度随机值,切勿硬编码或泄露。IdentityOptions.Password
,平衡易用与安全。通过以上步骤,你已完成 ASP.NET Core 中 Identity 与 JWT 的完整集成,具备生产级别的用户认证能力。祝你开发顺利!
原文引自YouTube视频:https://www.youtube.com/watch?v=Pkeu_o8k99Q