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

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

asp.net core怎么进行身份验证和授权 jwt认证实现教程

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”两步理清,再配好中间件和策略,就能稳稳跑起来。

以上就是ASP.NET Core怎么进行身份验证和授权 JWT认证实现教程的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1442973.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月17日 19:34:23
下一篇 2025年12月11日 23:16:30

相关推荐

  • Blazor 怎么给 HTTP 请求添加认证头

    Blazor中HTTP认证头配置核心是按场景选择方式:WASM推荐用DelegatingHandler动态注入Bearer Token,Server端通常无需前端加头。 在 Blazor 中给 HTTP 请求添加认证头,核心是配置 HttpClient 实例,使其自动携带如 Authorizatio…

    2025年12月17日
    000
  • Blazor 怎么发起 HTTP 请求

    Blazor发起HTTP请求应使用注入的HttpClient而非new实例,以避免连接泄漏;Server端默认注册IHttpClientFactory,WASM端受CORS限制且需配置凭据支持;推荐封装API客户端服务并统一处理错误与加载状态。 Blazor 发起 HTTP 请求主要靠 IHttpC…

    2025年12月17日
    000
  • Blazor 怎么从配置中读取连接字符串

    Blazor Server可通过IConfiguration或IOptions读取服务端appsettings.json中的连接字符串,而Blazor WebAssembly因运行在浏览器中,绝不可存放或读取连接字符串,必须通过后端API访问数据库,确保敏感信息仅存在于服务端安全存储中。 Blazo…

    2025年12月17日
    000
  • C#如何实现PDF文件生成 QuestPDF库使用教程

    QuestPDF 是 .NET 平台最轻量现代的 PDF 生成库,基于 Fluent API 用 C# 直接描述文档结构,需注册中文字体(如 Noto Sans CJK)以支持中文,安装 via NuGet,.NET 6+ 原生兼容。 用 C# 生成 PDF,QuestPDF 是目前最轻量、现代且易…

    2025年12月17日
    000
  • C#如何使用dynamic关键字 C#动态类型dynamic用法

    dynamic是C#中将类型检查推迟到运行时的特殊类型,适用于COM交互、反射调用、动态JSON处理及DSL构建等场景,但会丢失编译检查与IDE支持。 dynamic 是 C# 中用于绕过编译时类型检查的特殊类型,它把类型解析推迟到运行时。用它不是为了“替代”静态类型,而是为了解决某些特定场景下类型…

    2025年12月17日
    000
  • C# 中的Monitor.Wait和Pulse – 底层的线程同步原语

    Monitor.Wait 和 Monitor.Pulse 是 C# 中基于对象的线程同步原语,用于实现等待-通知机制:Wait 释放锁并使线程进入等待队列,Pulse 向队列中一个线程发送唤醒信号但不释放锁,二者需配合循环条件检查使用。 在 C# 中,Monitor.Wait 和 Monitor.P…

    2025年12月17日
    000
  • WPF怎么实现数据绑定 WPF MVVM数据绑定方法

    WPF数据绑定依赖DependencyProperty和INotifyPropertyChanged,ViewModel需实现该接口并触发PropertyChanged事件,View通过DataContext关联ViewModel,Binding路径须为public属性且区分大小写,集合应使用Obs…

    2025年12月17日
    000
  • Blazor 怎么集成 SignalR

    Blazor集成SignalR分三步:服务端定义Hub并注册、客户端安装包并建立连接、收发消息;推荐WASM模式以节省服务器资源;需注意路径大小写、CORS配置及开发期错误设置。 Blazor 集成 SignalR 主要分服务端 Hub 定义、客户端连接、消息收发三步,WebAssembly(WAS…

    2025年12月17日
    000
  • Blazor ElementReference.FocusAsync() 使用方法

    ElementReference.FocusAsync() 用于让 HTML 元素获得焦点,需 await 调用且仅在组件已渲染、元素存在于 DOM 时有效;应通过 @ref 绑定 ElementReference,避免在 OnInitialized 中调用,推荐在 OnAfterRender(配合…

    2025年12月17日
    000
  • C# LINQ中的SelectMany有什么用 – 将嵌套集合扁平化

    SelectMany用于将集合的集合扁平化为单层集合,支持投影、过滤与关联操作。例如,从学生列表中提取所有课程:var allCourses = students.SelectMany(s => s.Courses); 可保留上下文信息,如学生姓名与序号:.SelectMany((s, i) …

    2025年12月17日
    000
  • C#怎么使用IHttpClientFactory C# HttpClientFactory最佳实践

    IHttpClientFactory是.NET Core 2.1+推荐的HttpClient管理方式,解决new HttpClient导致的连接泄漏、DNS缓存不更新和SSL复用问题;它通过复用HttpMessageHandler提升性能与可靠性,并支持命名客户端、类型化客户端及Polly策略集成。…

    2025年12月17日
    000
  • C#怎么使用泛型 C#泛型类与泛型方法定义

    泛型是C#中提升代码复用性、类型安全性和性能的重要机制,支持泛型类、泛型方法、约束(where)、泛型委托及常用泛型类型。 泛型是 C# 中提升代码复用性、类型安全性和性能的重要机制。它让你写一次逻辑,适配多种类型,避免装箱/拆箱,也省去强制类型转换的麻烦。 泛型类:用 T 占位,运行时确定真实类型…

    2025年12月17日
    000
  • Blazor 表单怎么提交

    Blazor表单提交核心是EditForm组件+模型绑定+OnValidSubmit/OnInvalidSubmit事件处理。需用EditForm包裹表单并指定Model,绑定InputText等内置组件实现双向绑定,配合Data Annotations验证特性与DataAnnotationsVal…

    2025年12月17日
    000
  • Blazor 怎么实现一个全局通知服务

    Blazor全局通知服务通过创建NotificationService管理通知队列并触发UI更新,配合NotificationItem组件渲染,注册为scoped服务后在任意组件中注入调用Show()方法即可显示通知。 Blazor 实现全局通知服务,核心是创建一个可被任意组件注入、跨页面共享状态的…

    2025年12月17日
    000
  • Dapper如何优雅地关闭和释放连接 Dapper连接管理最佳实践

    Dapper不管理连接生命周期,需用using确保连接及时归还连接池;正确做法是每次查询用using包裹SqlConnection,避免手动Open/Close或复用连接;连接池应合理配置Max/Min Pool Size和Connection Lifetime。 Dapper本身不管理连接生命周期…

    2025年12月17日
    000
  • Blazor IStringLocalizer 多语言实现教程

    Blazor 多语言核心是 IStringLocalizer + .resx 资源文件 + 语言切换逻辑,不依赖 JS;需在 Program.cs 注册 AddLocalization(),按规范命名资源文件(如 SharedResource.zh-CN.resx),组件中 @inject IStr…

    2025年12月17日
    000
  • C#怎么用Unsafe类 C#不安全代码与指针操作

    C#中不存在名为Unsafe的公共类,真正使用的是unsafe上下文和指针语法;需在项目中启用AllowUnsafeBlocks,再用unsafe块、指针及fixed语句进行内存操作。 Unsafe 类本身不是 C# 中的一个可直接使用的类,这是个常见误解。C# 中没有名为 Unsafe 的公共类型…

    2025年12月17日
    000
  • WinForms怎么美化UI界面 WinForms第三方UI库使用教程

    WinForms可通过启用视觉样式、引入第三方UI库及局部美化实现现代化UI。需在Main方法开头调用Application.EnableVisualStyles();推荐NuGet安装SunnyUI、MaterialSkin.2或IrisSkins;再统一字体、调整配色、添加背景图;自定义绘制时须…

    2025年12月17日
    000
  • C# WebClient和HttpClient的比较 – 应该选择哪一个

    推荐使用 HttpClient 而非 WebClient,因前者支持异步优先、连接复用、HTTP/2/3、统一消息模型及 IHttpClientFactory 管理,后者已过时且功能受限、易致资源泄漏。 HttpClient 是当前 .NET 中推荐的 HTTP 客户端,WebClient 已被标记…

    2025年12月17日
    000
  • Blazor 怎么取消一个长时间运行的任务

    Blazor中取消长时间运行任务需使用CancellationToken配合async/await,在OnInitializedAsync中创建CancellationTokenSource,DisposeAsync中取消并释放,支持手动取消按钮和HTTP/Task.Delay等原生可取消操作。 B…

    2025年12月17日
    000

发表回复

登录后才能评论
关注微信