JWT CORE6.0 教學
时间: 2023-11-07 19:03:31 浏览: 81
.net core webapi jwt 更为清爽的认证详解
JWT(JSON Web Token)是一种基于 JSON 的开放标准,用于在网络应用间传递声明式身份验证和授权数据。在 .NET Core 6.0 中,可以使用 Microsoft.AspNetCore.Authentication.JwtBearer 包来实现 JWT 的身份验证。
以下是在 .NET Core 6.0 中使用 JWT 的教程:
1. 首先,需要在项目中安装 Microsoft.AspNetCore.Authentication.JwtBearer 包。可以使用 NuGet 包管理器或命令行工具来安装。
2. 在 appsettings.json 文件中配置 JWT 相关的信息,包括密钥、签名算法、有效期等。例如:
```json
{
"JwtSettings": {
"SecretKey": "my_secret_key_123456",
"Issuer": "my_issuer",
"Audience": "my_audience",
"ExpiresInMinutes": 30,
"Algorithm": "HS256"
}
}
```
3. 在 Startup.cs 文件中配置身份验证服务。可以在 ConfigureServices 方法中添加以下代码:
```csharp
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(options =>
{
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuer = true,
ValidateAudience = true,
ValidateLifetime = true,
ValidateIssuerSigningKey = true,
ValidIssuer = Configuration["JwtSettings:Issuer"],
ValidAudience = Configuration["JwtSettings:Audience"],
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Configuration["JwtSettings:SecretKey"]))
};
});
```
这段代码将使用 JWT Bearer 身份验证方案,并配置验证参数,包括验证发行者、接收者、过期时间、签名密钥等。
4. 在 Configure 方法中启用身份验证中间件,可以添加以下代码:
```csharp
app.UseAuthentication();
```
5. 在需要进行身份验证的控制器或方法上添加 [Authorize] 特性。例如:
```csharp
[ApiController]
[Route("[controller]")]
public class WeatherForecastController : ControllerBase
{
[HttpGet]
[Authorize]
public IEnumerable<WeatherForecast> Get()
{
// Your code here
}
}
```
这样,当请求经过该控制器或方法时,就会触发身份验证,只有经过验证的用户才能访问该方法。
6. 在登录时生成 JWT,并将其返回给客户端。可以使用 JwtSecurityToken 类来创建 JWT,例如:
```csharp
var claims = new[]
{
new Claim(ClaimTypes.Name, "Alice"),
new Claim(ClaimTypes.Email, "alice@example.com"),
};
var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Configuration["JwtSettings:SecretKey"]));
var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);
var token = new JwtSecurityToken(
issuer: Configuration["JwtSettings:Issuer"],
audience: Configuration["JwtSettings:Audience"],
claims: claims,
expires: DateTime.UtcNow.AddMinutes(Convert.ToInt32(Configuration["JwtSettings:ExpiresInMinutes"])),
signingCredentials: creds);
var encodedToken = new JwtSecurityTokenHandler().WriteToken(token);
```
这段代码将生成一个包含用户声明信息的 JWT,并使用配置文件中的密钥进行签名。
7. 在客户端发送请求时,在请求头中添加 Authorization 字段,并以 Bearer 开头,后面跟着生成的 JWT。例如:
```http
GET /weatherforecast HTTP/1.1
Host: example.com
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJBbGljZSIsImVtYWlsIjoiYWxpY2VAZXhhbXBsZS5jb20iLCJleHAiOjE2MzIyNjYxNzUsImlzcyI6Im15X2lzc3VlciIsImF1ZCI6Im15X2F1ZGllbmNlIn0.4vlSdFHvIvY7NvVJgCwjqj-01Pu3ZvTcSXOP8eJdF5c
```
这样,服务器就可以根据请求头中的 JWT 进行身份验证,并确定用户是否有权限访问该接口。
以上就是在 .NET Core 6.0 中使用 JWT 的教程。需要注意的是,在实际应用中,可能需要对 JWT 进行更加严格的安全性配置,例如使用 HTTPS 协议、使用公钥/私钥签名等。
阅读全文