ASP.NET Core怎么进行身份验证和授权 JWT认证实现教程


ASP.NET Core 中 JWT 身份验证核心是配置 Authentication 与 Authorization 中间件,流程为登录发 Token → 请求带 Token → 中间件自动校验 → 控制器用 [Authorize] 限定访问;需正确注册 JWT Bearer 服务、生成 Token 并设置密钥、签发者等参数,保护接口时结合角色或策略授权,并确保前端请求携带格式正确的 Authorization: Bearer Token 头。

ASP.NET Core 中使用 JWT 进行身份验证和授权,核心是配置 AuthenticationAuthorization 中间件,并正确颁发、验证 Token。关键不在于写多少代码,而在于理解流程:登录发 Token → 请求带 Token → 中间件自动校验 → 控制器用 [Authorize] 限定访问。

启用 JWT 身份验证服务

Program.cs(.NET 6+)中注册 JWT Bearer 验证服务,需提供密钥、签发者、受众等基础参数:

  • 密钥必须是至少 256 位的对称密钥(如 new SymmetricSecurityKey(Encoding.UTF8.GetBytes("your-32-byte-secret-key-here"))
  • 指定 ValidateIssuerValidateAudience 等为 true 时,Token 中必须包含匹配的 issaud 字段
  • 设置 ClockSkew 可放宽 Token 过期时间容错(默认 5 分钟,设为 TimeSpan.Zero 表示严格校验)

生成并返回 JWT Token

在登录接口(如 POST /api/auth/login)中,验证用户名密码后手动创建 Token:

  • ClaimsIdentity 或直接构建 Claim[] 数组,例如 new Claim(ClaimTypes.Name, user.Username)new Claim("role", "admin")
  • 使用 JwtSecurityTokenHandler 创建 Token 对象,设置有效期(Expires)、签名凭证(SigningCredentials
  • 调用 WriteToken() 得到字符串,通常以 JSON 形式返回:{ "token": "xxx.yyy.zzz" }

保护 API 接口与角色/策略授权

[Authorize] 特性即可启用验证;进一步控制权限可结合角色或自定义策略:

  • [Authorize(Roles = "admin")] 要求用户拥有 role 声明且值为 admin(注意:默认读取 ClaimTypes.Role,若用自定义 key 如 "role",需在添加 JWT 服务时通过 TokenValidationParameters.NameClaimTypeRoleClaimType 指定)
  • AddAuthorization 注册策略,例如限制仅 VIP 用户:builder.Services.AddAuthorization(options => options.AddPolicy("VipOnly", p => p.RequireClaim("level", "vip"))),然后在控制器上写 [Authorize(Policy = "VipOnly")]

前端请求记得带 Authorization Header

客户端每次请求受保护接口时,必须在 HTTP Header 中带上 Token:

  • 格式固定为:Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
  • 漏掉 Bearer 前缀(注意空格)会导致 401;Token 过期、签名无效、issuer 不匹配等都会返回 401 或 403
  • 开发调试时可用 Postman 或 curl 快速验证:curl -H "Authorization: Bearer xxx" https://localhost:5001/api/values

基本上就这些。JWT 流程不复杂但容易忽略细节——比如密钥长度不够报错、Claim 类型没对齐导致角色失效、Header 少了空格之类。把验证逻辑拆成“发 Token”和“验 Token”两步理清,再配好中间件和策略,就能稳稳跑起来。


# js  # 前端  # json  # iis  # curl  # ai  # .net  # yy  # red  # 中间件  # postman 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 网络优化76771 】 【 技术知识130152 】 【 IDC云计算60162 】 【 营销推广131313 】 【 AI优化88182 】 【 百度推广37138 】 【 网站推荐60173 】 【 精选阅读31334


相关推荐: Win11如何设置文件关联 Win11修改特定文件类型的默认打开程序【详解】  Win11怎么设置默认终端应用_Windows11开发者选项终端  Win11怎么关闭搜索历史_Win11清除设备上的搜索历史记录  C++中的std::shared_from_this有什么用?C++安全获取this的shared_ptr【智能指针】  如何在Golang中实现WebSocket广播_使用Channel和协程分发消息  如何快速验证Golang安装是否成功_运行go version和hello world示例  c++ atoi和atof函数用法_c++字符数组转数字  Python类装饰器使用_元编程解析【教程】  Mac的“调度中心”与“空间”怎么用_Mac多桌面高效管理【技巧】  网站体验不好=浪费钱:如何提升-用户体验效果差  如何使用Golang搭建Web开发环境_快速启动HTTP服务  Win11怎么开启专注模式_Windows11时钟应用Focus Session  Win11如何设置系统声音_Win11系统声音调整教程【攻略】  php怎么下载安装后测试是否成功_简单脚本验证方法【操作】  Python面向对象实战讲解_类与设计模式深入理解  c++的mutex和lock_guard如何使用 互斥锁保护共享资源【多线程】  Windows10系统服务优化指南_Win10禁用不必要服务提升性能  Python大文件处理策略_内存优化说明【指导】  Windows10无法识别USB设备描述符请求失败_通用串行总线控制器修复  Windows怎样关闭Edge新标签页广告_Windows关闭Edge新标签页设置【步骤】  Python包结构设计_大型项目组织解析【指导】  Win11任务栏天气怎么关闭 Win11隐藏天气小组件图标【设置】  Win11鼠标灵敏度怎么调 Win11鼠标指针移动速度设置【教程】  如何优化Golang内存分配与GC调度_Golang垃圾回收优化示例  Win10系统怎么查看端口状态_Windows10 CMD查看网络连接  MySQL 中使用 IF 和 CASE 实现查询字段的条件转换  c++如何使用std::bitset进行位图算法_c++ 快速查找与大规模数据排重【方法】  Win11怎么查看已连接wifi密码 Win11查已连wifi密码步骤【教程】  php报错怎么查看_定位PHP致命错误与警告的方法【教程】  Win11怎么开启移动热点_Windows11共享网络给手机设置教程  Go语言中CookieJar的持久化机制解析:内存存储与自定义持久化方案  Laravel 查询 JSON 列:高效筛选包含数组中任意值的记录  Python实现图数据库操作_Neo4j核心CRUD与图算法解析  Win11怎么更改盘符_Win11磁盘管理修改驱动器号【步骤】  微信企业付款回调PHP怎么接收_处理企业付款异步通知数据教程【教程】  如何高效获取循环末次生成的 NumPy 数组最后一个元素(无需额外循环)  如何解决同一段404代码在不同主机上表现不一致的问题  LINUX怎么设置系统语言_LINUX修改中文环境  Bpmn 2.0的XML文件怎么画流程图  Windows10电脑怎么设置虚拟光驱_Win10右键装载ISO镜像文件  Win11怎么更改账户头像_Windows 11自定义用户头像图片设置【步骤】  Win11怎么设置任务栏图标大小_Windows11注册表TaskbarSi修改  如何使用Golang编写单元测试_创建Test函数验证业务逻辑  Windows10系统怎么查看显卡型号_Win10 dxdiag显示选项卡  Python邮件系统自动化教程_批量发送解析与模板应用  PythonFastAPI项目实战教程_API接口与异步处理实践  如何在 Go 中调用动态链接库(.so)中的函数  Win11怎么关闭任务栏小组件_Windows11隐藏任务栏天气图标  如何在Golang中使用闭包_封装变量与函数作用域  Windows的便笺功能如何使用?(桌面备忘技巧) 

 2025-12-14

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

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

点击免费数据支持

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

致胜网络推广营销网


致胜网络推广营销网

致胜网络推广营销网专注海外推广十年,是谷歌推广.Facebook广告全球合作伙伴,我们精英化的技术团队为企业提供谷歌海外推广+外贸网站建设+网站维护运营+Google SEO优化+社交营销为您提供一站式海外营销服务。

 915688610

 17370845950

 915688610@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.