ASP.NET Core JWT 认证与授权
【摘要】 ASP.NET Core JWT 认证与授权 1. 介绍JWT(JSON Web Token)是一种开放标准(RFC 7519),用于在网络应用环境间安全地传递声明。ASP.NET Core 提供了内置的 JWT 认证与授权机制,可以轻松实现用户身份验证和权限控制。 2. 应用使用场景用户认证:验证用户身份,确保只有合法用户可以访问系统。API 保护:保护 RESTful API,防止未授...
ASP.NET Core JWT 认证与授权
1. 介绍
JWT(JSON Web Token)是一种开放标准(RFC 7519),用于在网络应用环境间安全地传递声明。ASP.NET Core 提供了内置的 JWT 认证与授权机制,可以轻松实现用户身份验证和权限控制。
2. 应用使用场景
- 用户认证:验证用户身份,确保只有合法用户可以访问系统。
- API 保护:保护 RESTful API,防止未授权访问。
- 单点登录(SSO):在多个应用间共享用户认证状态。
- 权限控制:根据用户角色限制访问权限。
3. 不同场景下详细代码实现
场景一:用户认证
-
安装 NuGet 包:
dotnet add package Microsoft.AspNetCore.Authentication.JwtBearer
-
配置 JWT 认证:
// Startup.cs public void ConfigureServices(IServiceCollection services) { var key = Encoding.ASCII.GetBytes("YourSecretKey"); services.AddAuthentication(x => { x.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme; x.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme; }) .AddJwtBearer(x => { x.RequireHttpsMetadata = false; x.SaveToken = true; x.TokenValidationParameters = new TokenValidationParameters { ValidateIssuerSigningKey = true, IssuerSigningKey = new SymmetricSecurityKey(key), ValidateIssuer = false, ValidateAudience = false }; }); services.AddControllers(); } public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { app.UseAuthentication(); app.UseAuthorization(); app.UseEndpoints(endpoints => { endpoints.MapControllers(); }); }
-
生成 JWT Token:
// AuthController.cs [ApiController] [Route("api/[controller]")] public class AuthController : ControllerBase { private readonly IConfiguration _configuration; public AuthController(IConfiguration configuration) { _configuration = configuration; } [HttpPost("login")] public IActionResult Login([FromBody] UserLogin userLogin) { var user = Authenticate(userLogin); if (user != null) { var token = GenerateJwtToken(user); return Ok(new { token }); } return NotFound("User not found"); } private UserModel Authenticate(UserLogin userLogin) { // 验证用户逻辑 return new UserModel { Username = userLogin.Username }; } private string GenerateJwtToken(UserModel user) { var key = new SymmetricSecurityKey(Encoding.ASCII.GetBytes(_configuration["Jwt:Key"])); var credentials = new SigningCredentials(key, SecurityAlgorithms.HmacSha256); var token = new JwtSecurityToken( issuer: _configuration["Jwt:Issuer"], audience: _configuration["Jwt:Audience"], claims: new[] { new Claim(ClaimTypes.Name, user.Username) }, expires: DateTime.Now.AddMinutes(30), signingCredentials: credentials); return new JwtSecurityTokenHandler().WriteToken(token); } }
场景二:API 保护
- 保护 API:
// WeatherForecastController.cs [ApiController] [Route("api/[controller]")] [Authorize] public class WeatherForecastController : ControllerBase { private static readonly string[] Summaries = new[] { "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching" }; [HttpGet] public IEnumerable<WeatherForecast> Get() { var rng = new Random(); return Enumerable.Range(1, 5).Select(index => new WeatherForecast { Date = DateTime.Now.AddDays(index), TemperatureC = rng.Next(-20, 55), Summary = Summaries[rng.Next(Summaries.Length)] }) .ToArray(); } }
场景三:权限控制
-
定义角色:
// Startup.cs public void ConfigureServices(IServiceCollection services) { services.AddAuthorization(options => { options.AddPolicy("AdminOnly", policy => policy.RequireRole("Admin")); }); services.AddControllers(); }
-
应用角色策略:
// AdminController.cs [ApiController] [Route("api/[controller]")] [Authorize(Policy = "AdminOnly")] public class AdminController : ControllerBase { [HttpGet] public IActionResult Get() { return Ok("This is an admin-only endpoint"); } }
4. 原理解释
JWT 是一种基于 JSON 的开放标准,用于在网络应用环境间安全地传递声明。JWT 由三部分组成:头部(Header)、载荷(Payload)和签名(Signature)。通过签名,可以验证 JWT 的真实性和完整性。
5. 算法原理流程图
用户登录 -> 生成 JWT -> 客户端存储 JWT -> 请求 API -> 验证 JWT -> 返回响应
6. 算法原理解释
- 用户登录:用户提供凭证,服务器验证凭证。
- 生成 JWT:服务器生成 JWT 并返回给客户端。
- 客户端存储 JWT:客户端存储 JWT,通常在本地存储或 Cookie 中。
- 请求 API:客户端在请求头中包含 JWT。
- 验证 JWT:服务器验证 JWT 的真实性和完整性。
- 返回响应:服务器根据 JWT 中的声明返回响应。
7. 实际详细应用代码示例实现
用户认证
// AuthController.cs
[ApiController]
[Route("api/[controller]")]
public class AuthController : ControllerBase
{
private readonly IConfiguration _configuration;
public AuthController(IConfiguration configuration)
{
_configuration = configuration;
}
[HttpPost("login")]
public IActionResult Login([FromBody] UserLogin userLogin)
{
var user = Authenticate(userLogin);
if (user != null)
{
var token = GenerateJwtToken(user);
return Ok(new { token });
}
return NotFound("User not found");
}
private UserModel Authenticate(UserLogin userLogin)
{
// 验证用户逻辑
return new UserModel { Username = userLogin.Username };
}
private string GenerateJwtToken(UserModel user)
{
var key = new SymmetricSecurityKey(Encoding.ASCII.GetBytes(_configuration["Jwt:Key"]));
var credentials = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);
var token = new JwtSecurityToken(
issuer: _configuration["Jwt:Issuer"],
audience: _configuration["Jwt:Audience"],
claims: new[] { new Claim(ClaimTypes.Name, user.Username) },
expires: DateTime.Now.AddMinutes(30),
signingCredentials: credentials);
return new JwtSecurityTokenHandler().WriteToken(token);
}
}
API 保护
// WeatherForecastController.cs
[ApiController]
[Route("api/[controller]")]
[Authorize]
public class WeatherForecastController : ControllerBase
{
private static readonly string[] Summaries = new[]
{
"Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
};
[HttpGet]
public IEnumerable<WeatherForecast> Get()
{
var rng = new Random();
return Enumerable.Range(1, 5).Select(index => new WeatherForecast
{
Date = DateTime.Now.AddDays(index),
TemperatureC = rng.Next(-20, 55),
Summary = Summaries[rng.Next(Summaries.Length)]
})
.ToArray();
}
}
8. 测试步骤以及详细代码
-
安装 NuGet 包:
dotnet add package Microsoft.AspNetCore.Authentication.JwtBearer
-
配置 JWT 认证:
- 在
Startup.cs
中配置 JWT 认证。
- 在
-
生成 JWT Token:
- 实现登录接口,生成 JWT Token。
-
保护 API:
- 使用
[Authorize]
属性保护 API。
- 使用
-
测试功能:
- 使用 Postman 或 Swagger 测试认证和授权功能。
9. 部署场景
- 硬件:云服务器(如 AWS、Azure)。
- 软件:.NET Core SDK、Nginx、Docker。
- 网络:HTTPS 加密传输,确保数据安全。
10. 材料链接
11. 总结
ASP.NET Core 提供了强大的 JWT 认证与授权机制,可以轻松实现用户身份验证和权限控制。通过合理的配置和实现,可以构建安全可靠的 Web 应用。
12. 未来展望
- 多因素认证:结合短信或邮件验证码增强安全性。
- OAuth 2.0 集成:支持第三方登录(如 Google、Facebook)。
- 分布式认证:结合 IdentityServer 实现分布式认证。
- AI 驱动的安全防护:利用 AI 技术检测异常登录行为。
通过不断的技术创新和应用实践,ASP.NET Core 在认证与授权领域的应用前景将更加广阔。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)