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


首先配置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全职业办公写作平台

厉害猫AI 137 查看详情 厉害猫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如何实现身份验证和授权的详细内容,更多请关注其它相关文章!


# 转换为  # 营销推广类ppt  # 鞍山品牌网站推广电话  # seo培训外推代做  # 哪个网站的优化系统最好用  # 抖音不能推广营销活动吗  # 个人网站做不了推广吗  # 望江seo优化收费情况  # 崇明区巨型网站建设预算  # 下拉关键词排名到1火星  # 金华抖音营销推广中心  # 推荐使用  # 是一种  # 数据格式  # 这是  # 如何将  # javascript  # 如何实现  # 如何处理  # 身份验证  # 令牌  # .net  # microsoft  # ai  # mac  # app  # go  # json  # 前端  # js  # java  # word 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894


相关推荐: realme 10 Pro息屏方案_realme 10 Pro省电策略  风神瞳获取全攻略  如何在CSS中使用过渡制作按钮边框渐变_border-color transition实现  英雄联盟争者留名活动介绍  实时数据流中高效查找最小值与最大值  Sublime怎么配置YAML文件格式化_Sublime YAML Formatter插件教程  OTT月报 | 2025年9月智能电视大数据报告  《气泡星球》兑换码礼包大全  c++如何实现一个简单的RPC框架_c++远程过程调用原理与实践  顺丰快递单号查询寄件人 顺丰寄件人查询入口  《i莞家》修改昵称方法  漫蛙manwa官网浏览入口_漫蛙漫画网页版访问链接  猫眼电影app怎么查询电影院的营业时间_猫眼电影影院营业时间查询教程  Python实时数据流中高效查找最大最小值  QQ阅读小说搜索入口地址_QQ阅读小说搜索入口地址搜索在线阅读  《桃源记2》资源采集攻略  之了课堂app做题入口  胃动力不足?试试这5个调理方法  b站如何剪辑视频_b站必剪app使用教程  RxJS中如何高效地在一个函数内处理和合并多个数据集合  mysql中如何分析索引使用情况_mysql索引使用分析方法  苹果手机缓存怎么清除_苹果手机缓存如何清除iphone各版本操作步骤  HTML与J*aScript实现下拉菜单驱动的动态表格:构建交互式维修表单  抖音小程序怎么开通?小程序开通条件是什么?  J*aScript与CSS动画:实现平滑顺序淡入淡出效果并解决显示冲突  4399小游戏下装链接 4399小游戏下载链接入口  《一起考教师》账号注销方法  毒蘑菇VOLUMESHADER_BM官网首页登录入口 毒蘑菇VOLUMESHADER_BM官网首页登录入口说明  宝妈做视频号该写什么标签话题?宝妈关注的话题有哪些?  店铺如何做视频号推广?做视频号推广有用吗?  C++怎么解决数值计算中的精度问题_C++浮点数误差与数值稳定性分析  解决VS Code中Python版本冲突与输出异常的指南  抖音网页版官方链接 抖音网页版官网链接入口  VS Code源代码管理(SCM)视图的进阶使用技巧  店铺如何关联视频号推广?视频号推广有什么用?  139邮箱登录入口官网 139邮箱登录入口官网网址  win11如何开启单声道音频 Win11为听障用户合并左右声道【辅助】  《爱笔思画x》涂色教程  Sublime怎么快速复制文件路径_Sublime右键菜单增强技巧  ao3入口镜像地址 ao3镜像入口可靠跳转  荣耀Magic7拍照夜景噪点处理_荣耀Magic7相机优化  优化长HTML属性值:SonarQube警告与实用策略  PHP页面重载后变量状态保持:实现用户档案连续浏览的教程  Win11怎么录屏_Windows 11自带Xbox Game Bar录制视频  C++ priority_queue怎么用_C++优先队列底层实现与自定义比较器  C++中std::thread和std::async的区别_C++并发编程与线程与异步任务比较  如何在Python中安全地将环境变量转换为整数并满足Mypy类型检查  原子笔记app误删找回教程  《下一站江湖2》独孤剑诀习得方法  《大周列国志》皇帝律令功能介绍 

 2025-11-01

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.