.NET Web API如何实现身份验证和授权

月夜之吻
发布: 2025-11-01 19:32:01
原创
741人浏览过
首先配置JWT身份验证并添加认证授权中间件,然后生成令牌供登录使用,接着通过[Authorize]特性实现角色或策略授权,最后前端请求携带Bearer令牌完成安全调用。

.net web api如何实现身份验证和授权

在构建 .NET Web API 时,实现身份验证和授权是保障接口安全的关键步骤。现代 .NET(如 .NET 6 及以上版本)推荐使用基于 JWT 的身份验证机制,并结合策略或角色进行授权控制。下面介绍如何一步步实现。

启用 JWT 身份验证

JWT(JSON Web Token)是一种无状态的身份验证方式,适合分布式系统。你需要配置服务端生成并验证令牌。

1. 安装所需 NuGet 包(通常已包含在项目中):

Microsoft.AspNetCore.Authentication.JwtBearer

2. 在 Program.cs 中添加 JWT 验证服务:

var builder = WebApplication.CreateBuilder(args);

// 添加认证服务
builder.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 = builder.Configuration["Jwt:Issuer"],
ValidAudience = builder.Configuration["Jwt:Audience"],
IssuerSigningKey = new SymmetricSecurityKey(
Encoding.UTF8.GetBytes(builder.Configuration["Jwt:Key"]))
};
});

// 启用认证和授权中间件
var app = builder.Build();
app.UseAuthentication();
app.UseAuthorization();

3. 在 appsettings.json 中配置 JWT 参数:

"Jwt": {
"Key": "your-very-secret-key-that-is-long-enough",
"Issuer": "https://localhost:5001",
"Audience": "https://localhost:5001"
}

生成登录令牌

创建一个登录接口,在用户凭据正确时返回 JWT 令牌。

[HttpPost("login")]
public IActionResult Login([FromBody] LoginModel model)
{
// 示例:验证用户名密码(实际应查数据库)
if (model.Username == "admin" && model.Password == "password")
{
var tokenDescriptor = new SecurityTokenDescriptor
{
Subject = new ClaimsIdentity(new[]
{
new Claim(ClaimTypes.Name, model.Username),
new Claim(ClaimTypes.Role, "Admin")
}),
Expires = DateTime.UtcNow.AddHours(1),
Issuer = Configuration["Jwt:Issuer"],
Audience = Configuration["Jwt:Audience"],
SigningCredentials = new SigningCredentials(
new SymmetricSecurityKey(
Encoding.UTF8.GetBytes(Configuration["Jwt:Key"])),
SecurityAlgorithms.HmacSha256)
};
var tokenHandler = new JwtSecurityTokenHandler();
var token = tokenHandler.CreateToken(tokenDescriptor);
var jwtToken = tokenHandler.WriteToken(token);

return Ok(new { token = jwtToken });
}
return Unauthorized();
}

使用授权控制访问

在控制器或方法上使用 [Authorize] 特性限制访问。

Blackink AI纹身生成
Blackink AI纹身生成

创建类似纹身的设计,生成独特纹身

Blackink AI纹身生成17
查看详情 Blackink AI纹身生成

例如,只允许通过身份验证的用户访问:

[Authorize]
[ApiController]
[Route("api/[controller]")]
public class SecureController : ControllerBase
{
[HttpGet("data")]
public IActionResult GetData()
{
return Ok(new { message = "这是受保护的数据", user = User.Identity.Name });
}
}

按角色授权:

[Authorize(Roles = "Admin")]
[HttpGet("admin-only")]
public IActionResult AdminOnly()

自定义策略授权(需提前注册策略):

// 在 Program.cs 中添加策略
builder.Services.AddAuthorization(options =>
{
options.AddPolicy("MustBeAdminOrManager", policy =>
policy.RequireRole("Admin", "Manager"));
});

// 使用
[Authorize(Policy = "MustBeAdminOrManager")]

前端请求携带令牌

客户端在调用受保护的 API 时,需在请求头中包含 Authorization 字段:

Authorization: Bearer <your-jwt-token>

例如使用 JavaScript fetch:

fetch("/api/secure/data", {
headers: {
'Authorization': 'Bearer ' + token
}
})

基本上就这些。只要配置好 JWT 验证、生成令牌、并在需要的地方加上授权标签,你的 Web API 就具备了基本的安全控制能力。注意密钥保管和 HTTPS 使用,避免敏感信息泄露。

以上就是.NET Web API如何实现身份验证和授权的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号