新闻中心

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

2025-11-01
浏览次数:
返回列表
首先配置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] 特性限制访问。

短影AI 短影AI

长视频一键生成精彩短视频

短影AI 170 查看详情 短影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

例如使用 J*aScript fetch:

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

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

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


# word  # javascript  # microsoft  # ai  # mac  # app  # go  # json  # 前端  # js  # java  # 营销小程序推广方案设计  # seo工具下载  # 黑龙江网站优化合作  # 端点seo  # 福州网站建设制作推荐  # 惠州一站式网站推广工具  # 河北推广营销定制  # 武汉网站营销与推广  # 医美推广营销策划  # 中山精美网站建设  # 推荐使用  # 如何在  # 是一种  # 数据格式  # 这是  # 操作指南  # 如何实现  # 如何处理  # 身份验证  # 令牌  # .net 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: b站怎么删除评论_b站评论管理与删除操作  c++如何使用std::memory_order控制原子操作顺序_c++ C++11内存模型详解  打开就能玩的植物大战僵尸 植物大战僵尸网页版传送门  Spyder启动失败:字体文件权限拒绝错误解决方案  如何在低配置电脑上搭建轻量级J*a环境_占用更小的环境选择技巧  Adobe PDF表单中利用J*aScript解析与格式化日期组件的教程  Django表单验证失败时保留用户输入数据的最佳实践  React中useState与局部变量:理解组件状态管理与渲染机制  地铁跑酷免费秒玩入口链接 地铁跑酷小游戏免费秒玩网站  b站怎么看视频的弹幕数量_b站弹幕数量查看方法  CSS Flexbox如何实现多行排列_flex-wrap wrap自动换行显示  css绝对定位元素脱离父容器怎么办_确保父元素position非static  qq浏览器打开空白页怎么办 qq浏览器启动后显示白屏的解决教程  4399免费游戏网址入口 4399小游戏免费入口点开即玩  React Router v6 教程:构建认证保护的私有路由与重定向策略  如何在网页中实现特定地点的随机图片展示  win11 arm版怎么安装 M1/M2 Mac虚拟机安装ARM win11的方法  漫蛙manwa2最新登录网址_漫蛙manwa2手机网页版入口  在J*a中如何开发简易电子商务商品管理系统_商品管理系统项目实战解析  J*aScript中正确使用querySelectorAll与复杂CSS选择器  KFC游戏互动怎么赢取优惠券_KFC线上游戏活动参与与优惠代码赢取教程  J*aScript中安全有效地处理localStorage字符串数据  谷歌浏览器无痕模式怎么开 Chrome开启无痕浏览设置方法【教程】  天猫2025双十一0点秒杀攻略 天猫爆款抢购时间  Mudbox图层蒙版怎么用_Mudbox图层蒙版数字雕刻应用技巧  基于动态规划的房屋花卉种植最小成本算法详解  在J*aScript中复现SciPy的B样条拟合与求值:关键考量  PrimeNG Sidebar背景色自定义指南:CSS覆盖与主题化实践  Lar*el Form Request中唯一性验证在更新操作中的正确实现  Animex动漫社网入口地址 Animex动漫社网正版在线入口  Spring Boot嵌入式服务器与J*a EE:功能支持深度解析  C++编译期如何执行复杂计算_C++模板元编程(TMP)技巧与应用  Safari浏览器输入栏卡顿如何解决 Safari搜索建议与缓存清理  如何将HTML表格多行数据保存到Google Sheet  CSS实现侧边栏导航项全宽圆角悬停背景效果  Archive of Our Own官网直达 AO3最新可用地址一览  TikTok搜索不到用户发布内容怎么办 TikTok用户内容搜索优化方法  Excel如何用迷你图显趋势_Excel用迷你图显趋势【趋势小图】  Go调试环境为何无法启动_Go调试器启动失败原因与解决策略  Angular响应式表单:实现提交后表单及按钮的禁用与只读化  汽水音乐车机版8.9下载 汽水音乐车机版8.9版本安装入口  J*aScript数组对象转换:按指定键分组与值收集  React Hooks最佳实践:动态组件状态管理的组件化方案  谷歌google账号注册详细步骤 谷歌账号注册官方教程  动漫花园资源网使用步骤_动漫花园资源网下载流程  C++如何实现一个智能指针_手动实现C++ shared_ptr的引用计数功能  如何解决电商平台定制报价请求的“黑洞”问题,SprykerQuoteRequest模块助你提升客户体验与销售效率  字由网在线版登录地址 字由网网页版安全入口  Win10怎么制作U盘启动盘 Win10系统安装U盘制作教程【详解】  QQ邮箱网页版登录入口 QQ邮箱官方在线使用平台 

搜索