ASP.NET Core 8.0 MVC Razor Web应用程序中使用JWT进行登录验证
时间: 2024-09-12 10:04:21 浏览: 26
在ASP.NET Core 8.0 MVC Razor Web应用程序中使用JWT(JSON Web Tokens)进行登录验证主要涉及以下几个步骤:
1. 添加JWT包依赖:首先需要在项目中添加用于处理JWT的包,如`Microsoft.AspNetCore.Authentication.JwtBearer`。这可以通过NuGet包管理器来完成。
2. 配置JWT认证服务:在`Startup.cs`的`ConfigureServices`方法中配置JWT认证服务。设置JWT的签名密钥、令牌验证参数等。
```csharp
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(options =>
{
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuer = true,
ValidateAudience = true,
ValidateLifetime = true,
ValidateIssuerSigningKey = true,
ValidIssuer = Configuration["Jwt:Issuer"],
ValidAudience = Configuration["Jwt:Audience"],
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Configuration["Jwt:Key"]))
};
});
```
3. 授权控制器或动作:在需要保护的控制器或动作上添加`[Authorize]`属性,这样只有通过JWT认证的用户才能访问。
```csharp
[ApiController]
[Route("[controller]")]
[Authorize]
public class WeatherForecastController : ControllerBase
{
// ...
}
```
4. 生成JWT令牌:在用户成功登录后,根据登录信息生成JWT令牌。这通常在登录接口的处理逻辑中完成。
```csharp
var claims = new Claim[] {
new Claim(JwtRegisteredClaimNames.Sub, user.Id.ToString()),
new Claim(JwtRegisteredClaimNames.UniqueName, user.UserName),
// ... 其他声明
};
var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Configuration["Jwt:Key"]));
var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);
var token = new JwtSecurityToken(
issuer: Configuration["Jwt:Issuer"],
audience: Configuration["Jwt:Audience"],
claims: claims,
expires: DateTime.Now.AddMinutes(30),
signingCredentials: creds);
return Ok(new { Token = new JwtSecurityTokenHandler().WriteToken(token) });
```
5. 在客户端发送请求时,将生成的JWT令牌放在请求头中。
```http
Authorization: Bearer <token>
```