当前位置: 欣欣网 > 码农

WebApi中添加Jwt鉴权

2024-06-01码农

随着Web应用的快速发展,安全性成为了越来越重要的考量因素。JSON Web Token(JWT)作为一种开放标准(RFC 7519),定义了一种紧凑的、自包含的方式,用于在双方之间安全地传输信息作为JSON对象。这些信息可以被验证、信任,因为它们是数字签名的。在WebApi中添加JWT鉴权,可以大大提高系统的安全性。

JWT简介

JWT主要由三部分组成:Header(头部),Payload(负载),和Signature(签名)。Header和Payload都是JSON对象,经过Base64编码后形成JWT的第一部分和第二部分。Signature是对前两部分进行签名,防止数据被篡改。

在WebApi中添加JWT鉴权

以下是在ASP.NET Core WebApi中添加JWT鉴权的基本步骤:

1. 安装必要的NuGet包

首先,你需要在项目中安装 Microsoft.AspNetCore.Authentication.JwtBearer 包。

dotnet add package Microsoft.AspNetCore.Authentication.JwtBearer

2. 配置JWT认证

Startup.cs ConfigureServices 方法中配置JWT认证。

publicvoidConfigureServices(IServiceCollection services)
{
services.AddAuthentication(options =>
{
options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
})
.AddJwtBearer(options =>
{
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuer = true,
ValidateAudience = true,
ValidateLifetime = true,
ValidateIssuerSigningKey = true,
ValidIssuer = "YourIssuer"// 你的Issuer
ValidAudience = "YourAudience"// 你的Audience
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("YourSecretKey")) // 你的密钥
};
});
services.AddControllers();
}

3. 应用JWT中间件

Startup.cs Configure 方法中,确保 app.UseAuthentication() app.UseAuthorization() 被正确调用。

publicvoidConfigure(IApplicationBuilder app, IWebHostEnvironment env)
{
// ... 其他中间件配置 ...
app.UseAuthentication(); // 启用认证中间件
app.UseAuthorization(); // 启用授权中间件
// ... 其他中间件配置 ...
}

4. 在控制器或动作上应用授权属性

现在,你可以在你的控制器或动作方法上使用 [Authorize] 属性来要求JWT认证。

[ApiController]
[Route("[controller]")]
[Authorize// 这个控制器下的所有动作都需要JWT认证
public classValuesController : ControllerBase
{
// GET api/values
[HttpGet]
public ActionResult<IEnumerable<string>> Get()
{
returnnewstring[] { "value1""value2" };
}
}

或者,你也可以只对特定的动作方法应用 [Authorize] 属性。

[ApiController]
[Route("[controller]")]
public classValuesController : ControllerBase
{
// GET api/values
[HttpGet]
[Authorize// 仅这个动作需要JWT认证
public ActionResult<IEnumerable<string>> Get()
{
returnnewstring[] { "value1""value2" };
}
}

5. 测试你的JWT认证

为了测试你的JWT认证是否工作正常,你可以使用Postman或Curl等工具发送带有有效或无效JWT的请求到你的API端点,并观察响应。如果认证成功,你应该能够访问受保护的资源;如果认证失败,你应该会收到一个401 Unauthorized响应。

结论

在WebApi中添加JWT鉴权是保护你的API免受未经授权访问的重要步骤。通过遵循上述步骤,你可以轻松地为你的ASP.NET Core WebApi添加JWT鉴权功能。记住,安全性是一个持续的过程,定期审查和更新你的安全策略是非常重要的。