在ASP.NET中,使用JSON Web Token(JWT)进行身份验证涉及以下几个步骤:
-
安装NuGet包:首先,您需要安装两个NuGet包,
Microsoft.AspNetCore.Authentication.JwtBearer
和System.IdentityModel.Tokens.Jwt
。这些包将帮助您实现JWT身份验证。在Visual Studio中,右键单击项目 -> 选择“管理NuGet程序包” -> 搜索并安装上述两个包。
-
配置JwtBearer:在
Startup.cs
文件中,您需要配置JwtBearer中间件。首先,将JwtBearer
添加到ConfigureServices
方法中的AuthenticationService
集合中:services.AddAuthentication(options => { options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme; options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme; }) .AddJwtBearer(options => { options.RequireHttpsMetadata = https://www.yisu.com/ask/true;"your_secret_key")), ValidateIssuer = false, ValidateAudience = false }; });
请确保将
your_secret_key
替换为您自己的密钥。 -
创建登录端点:在
Controllers
文件夹中,创建一个名为AccountController
的新控制器。在此控制器中,添加一个名为Login
的POST方法,该方法将验证用户凭据并生成JWT令牌。[HttpPost("login")] public async Task
Login([FromBody] LoginViewModel model) { // 验证用户凭据(例如,检查用户名和密码) if (IsValidUser(model.Username, model.Password)) { var claims = new[] { new Claim(ClaimTypes.Name, model.Username), new Claim(ClaimTypes.Email, model.Email) }; var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("your_secret_key")); var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256); var token = new JwtSecurityToken( issuer: "your_issuer", audience: "your_audience", claims: claims, expires: DateTime.UtcNow.AddMinutes(30), signingCredentials: creds); return Ok(new { token }); } return Unauthorized(); } 请确保将
your_issuer
和your_audience
替换为您自己的值。 -
保护路由:现在,您可以使用
[Authorize]
属性保护需要身份验证的路由。例如,如果您有一个名为ProtectedController
的控制器,可以将其中的所有方法标记为受保护:[Authorize] public class ProtectedController : Controller { // 受保护的方法 }
-
访问令牌:当用户通过登录端点成功登录时,他们将收到一个JWT令牌。在后续请求中,他们需要在HTTP请求头中包含此令牌,如下所示:
Authorization: Bearer your_jwt_token
服务器将验证此令牌并允许或拒绝访问受保护的资源。
这就是在ASP.NET中使用JWT实现身份验证的基本过程。您可能需要根据项目需求对其进行调整。