新闻中心
.NET Web API如何实现身份验证和授权
首先配置JWT身份验证并添加认证授权中间件,然后生成令牌供登录使用,接着通过[Authorize]特性实现角色或策略授权,最后前端请求携带Bearer令牌完成安全调用。

在构建 .NET Web API 时,实现身份验证和授权是保障接口安全的关键步骤。现代 .NET(如 .NET 6 及以上版本)推荐使用基于 JWT 的身份验证机制,并结合策略或角色进行授权控制。下面介绍如何一步步实现。
启用 JWT 身份验证
JWT(JSON Web Token)是一种无状态的身份验证方式,适合分布式系统。你需要配置服务端生成并验证令牌。
1. 安装所需 NuGet 包(通常已包含在项目中):
Microsoft.AspNetCore.Authentication.JwtBearer2. 在 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
长视频一键生成精彩短视频
170
查看详情
例如,只允许通过身份验证的用户访问:
[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邮箱官方在线使用平台


2025-11-01
浏览次数:次
返回列表