JWT CORE6.0 教學
时间: 2023-11-07 12:14:52 浏览: 160
JWT (JSON Web Tokens) 是一种用于在网络间安全地传输数据的标准。在 .NET Core 6.0 中,你可以使用 Microsoft.AspNetCore.Authentication.JwtBearer NuGet 包来实现 JWT 认证。下面是一个简单的教程,演示如何在 .NET Core 6.0 中实现 JWT 认证。
1. 创建一个新的 ASP.NET Core 6.0 Web API 项目。
2. 在项目中安装 Microsoft.AspNetCore.Authentication.JwtBearer NuGet 包。可以使用 Visual Studio 中的 NuGet 管理器或执行以下命令:
```
dotnet add package Microsoft.AspNetCore.Authentication.JwtBearer
```
3. 在 Startup.cs 中,添加以下代码来配置认证服务:
```csharp
using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.IdentityModel.Tokens;
using System.Text;
public void ConfigureServices(IServiceCollection services)
{
// 添加 JWT 认证服务
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(options =>
{
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuer = true,
ValidateAudience = true,
ValidateLifetime = true,
ValidateIssuerSigningKey = true,
ValidIssuer = "your_issuer",
ValidAudience = "your_audience",
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("your_secret_key"))
};
});
// 配置其他服务
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
// 添加认证中间件
app.UseAuthentication();
// 配置其他中间件
}
```
在上面的代码中,我们配置了一个 JWT 认证服务,并指定了一些验证参数。这些参数包括:
- `ValidateIssuer`:是否验证发行人。
- `ValidateAudience`:是否验证受众。
- `ValidateLifetime`:是否验证令牌的生存期。
- `ValidateIssuerSigningKey`:是否验证签名密钥。
- `ValidIssuer`:发行人的名称。
- `ValidAudience`:受众的名称。
- `IssuerSigningKey`:用于签名和验证令牌的密钥。
4. 添加授权中间件
在 Startup.cs 中,添加以下代码来配置授权服务:
```csharp
using Microsoft.AspNetCore.Authorization;
public void ConfigureServices(IServiceCollection services)
{
// 添加授权服务
services.AddAuthorization(options =>
{
options.AddPolicy("Bearer", new AuthorizationPolicyBuilder()
.AddAuthenticationSchemes(JwtBearerDefaults.AuthenticationScheme)
.RequireAuthenticatedUser()
.Build());
});
// 配置其他服务
}
```
在上面的代码中,我们配置了一个授权服务,并指定了一个基于 JWT 的策略。该策略要求用户在进行任何操作之前进行身份验证。
5. 在控制器上添加 Authorize 属性
现在,我们可以在需要进行身份验证的控制器或操作上添加 Authorize 属性。例如:
```csharp
[ApiController]
[Route("api/[controller]")]
[Authorize("Bearer")]
public class MyController : ControllerBase
{
// ...
}
```
在上面的代码中,我们使用 Authorize 属性来指定需要进行身份验证的操作。我们还指定了我们之前创建的基于 JWT 的授权策略。
6. 生成 JWT
现在我们需要编写代码来生成 JWT。以下是一个简单的示例:
```csharp
using System;
using System.IdentityModel.Tokens.Jwt;
using System.Security.Claims;
using System.Text;
using Microsoft.IdentityModel.Tokens;
// ...
var secretKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("your_secret_key"));
var signingCredentials = new SigningCredentials(secretKey, SecurityAlgorithms.HmacSha256);
var claims = new[]
{
new Claim(ClaimTypes.Name, "John Doe"),
new Claim(ClaimTypes.Role, "Admin")
};
var token = new JwtSecurityToken(
issuer: "your_issuer",
audience: "your_audience",
claims: claims,
expires: DateTime.UtcNow.AddMinutes(30),
signingCredentials: signingCredentials);
var jwtToken = new JwtSecurityTokenHandler().WriteToken(token);
```
在上面的代码中,我们使用 SymmetricSecurityKey 和 SigningCredentials 对象来指定密钥和加密算法。我们还创建了一组声明,这些声明将包含在 JWT 中。最后,我们使用 JwtSecurityToken 对象来创建 JWT。
7. 发送 JWT 到客户端
现在我们需要将生成的 JWT 发送到客户端。可以通过将其作为响应的一部分发送。
```csharp
return Ok(new { token = jwtToken });
```
我们可以在客户端使用该令牌来进行后续请求。可以将 JWT 添加到 Authorization 头部中,例如:
```
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
```
这样就完成了在 .NET Core 6.0 中使用 JWT 认证的教程。
阅读全文