新闻中心

Blazor JWT Token 登录和授权方法

2025-12-14
浏览次数:
返回列表
Blazor中JWT登录授权需前后端闭环协作:后端用HMAC-SHA256签发含name/role/exp的token并返回UserToken结构;前端存localStorage、HttpClient自动携Bearer头、AuthorizeView拦截路由、401时跳登录页、登出时清除token并重置状态。

blazor jwt token 登录和授权方法

Blazor 中实现 JWT 登录和授权,核心是前后端协同:后端签发并验证 token,前端安全存储、携带并控制访问。关键不在“能不能做”,而在于“每一步是否闭环”——登录拿 token、请求带 token、未授权时跳转、退出清 token,缺一不可。

后端生成 JWT 并返回

用户提交账号密码后,后端验证通过,立即生成标准 JWT 并返回给前端。推荐封装为独立服务(如 IJWTHelper),避免逻辑散落。

  • 使用 SymmetricSecurityKeyHMAC-SHA256 签名,密钥从 appsettings.json 读取,不硬编码
  • payload 至少包含 nameClaimTypes.Name),可选加 roleuid 等用于后续授权
  • 设置合理过期时间(如 30 分钟),避免长期有效 token 带来的风险
  • 返回结构建议统一,例如 UserToken { Token: "...", ExpireTime: ..., IsSuccess: true }

前端存储与携带 token

Blazor WebAssembly(WASM)默认用 localStorage,Blazor Server 可选 cookie 或 SignalR 上下文透传;无论哪种,都要确保每次 API 请求头自动带上 Authorization: Bearer xxx

  • 登录成功后调用 JS 保存:await js.InvokeVoidAsync("localStorage.setItem", "authToken", token)
  • 封装带认证头的 HttpClient,或在发送前动态注入:client.DefaultRequestHeaders.Authorization = new("Bearer", token)
  • 避免在组件中反复读取 localStorage,可抽成 AuthService 提供 GetTokenAsync() 方法
  • 敏感操作(如修改密码)建议额外校验 token freshness,不单靠存在性

路由保护与未授权跳转

JWT 本身不控制页面访问,必须由前端主动拦截。Blazor 没有内置“401 自动跳转”,需手动处理。

Glarity Glarity

Glarity是一款免费开源的AI浏览器扩展,提供YouTube视频总结、网页摘要、写作工具等功能,支持免费的镜像翻译,电子邮件写作辅助,AI问答等功能。

Glarity 131 查看详情 Glarity
  • App.razor 或布局组件中检查 token 是否存在且未过期(可解析 payload 中 exp 字段)
  • 对受保护页面,用 <authorizeview></authorizeview> 包裹,配合 NotAuthorized 模板跳转到登录页
  • API 调用失败且状态码为 401 时,在 service 层捕获并触发全局导航:N*igationManager.N*igateTo("/login?returnUrl=" + Uri.EscapeDataString(currentUrl))
  • 注册页跳转不是 JWT 标准行为,而是业务逻辑——比如登录接口返回 401 且后端明确提示“用户不存在”,前端才跳注册

登出与 token 失效处理

JWT 是无状态的,登出只需前端清除本地 token;但要注意“已签发未过期 token 仍可用”的事实,高安全场景需服务端维护黑名单或缩短有效期。

  • 登出时调用:await js.InvokeVoidAsync("localStorage.removeItem", "authToken")
  • 同步清空内存中的 token 缓存(如有),避免组件残留旧值
  • 导航到登录页,并重置 AuthenticationStateProvider(WASM)或注销 cookie(Server)
  • 不建议依赖 sessionStorage 替代登出逻辑,它只是关闭标签页才失效,不符合主动登出语义

基本上就这些。流程清晰、边界明确,就不容易在刷新页面丢状态、API 401 不跳转、token 过期后仍能进首页这类问题上踩坑。

以上就是Blazor JWT Token 登录和授权方法的详细内容,更多请关注其它相关文章!


# 普陀区常见网站优化  # 等功能  # 如何将  # 操作指南  # 序列化  # 都要  # 就不  # seo数据体系  # 黄山网站权重优化哪家强  # 可选  # 江苏营销网络推广哪家好  # 扬中网站建设如何  # 阜平县网站推广联系电话  # 精准营销和流量推广哪个好  # 鼓楼网络营销推广服务  # 舟山外贸推广网络营销  # 豪宅营销推广主题名字  # ai  # 前端  # json  # cookie  # 编码  # app  # session  # 后端  # mac  # js  # 路由  # nas  # 状态码  # 黑名单  # se  # 跳转  # 闭环 


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


相关推荐: 《北京人工智能产业白皮书(2025)》发布:全年核心产值预计突破 4500 亿元  J*aScript打印功能_j*ascript输出控制  钉钉视频会议声音异常如何处理 钉钉会议音频修复技巧  MongoDB聚合管道:正确匹配对象数组中_id的方法  QQ邮箱官网登录入口 QQ邮箱网页版邮箱快速登录  怎么在html里运行vbs脚本_html中运行vbs脚本方法【教程】  C++如何实现一个装饰器模式_C++设计模式之动态地给对象添加额外职责  TikTok国际版官网直达_TikTok国际版官网直达进入在线观看  优化MinIO list_objects_v2 操作的性能瓶颈与最佳实践  为什么简单的XML文件也会解析失败? 检查隐藏的非打印字符(如BOM)的方法  台积电1.4nm工艺A14瞄准2028:10年来性能提升80%  天眼查企业查询官网入口 天眼查官方网页版查询  Excel Power Pivot如何处理XML数据源 构建高级数据模型  J*aScript类型检查_j*ascript代码规范  一加 14R 快充无反应_一加 14R 充电优化  EMS快递官网app_中国邮政速递物流手机客户端  TypeScript/J*aScript:高效查找数组中首个唯一ID对象  Node.js CSV 数据处理:基于字段值条件过滤整条记录的策略  b站如何看历史记录_b站观看历史找回方法  多闪网页版在线观看免费入口_多闪官网访问入口  谷歌浏览器怎么给标签页静音_Chrome标签静音快捷操作  蛙漫移动版在线看 蛙漫手机浏览器直达入口  C++如何打印当前代码行号与文件名_C++预定义宏FILE与LINE的使用  照顾宝贝2小游戏点击立即在线玩  谷歌浏览器无痕模式怎么开 Chrome开启无痕浏览设置方法【教程】  Golang如何通过reflect操作map_Golang reflect map操作与遍历技巧  快速CSGO开箱网站指南 CSGO开箱平台推荐  C++如何操作大型数据集_使用C++流式处理(Streaming)技术避免一次性加载大文件  age动漫网站入口 age动漫官网直接访问入口  如何使用纯J*aScript判断Input元素是否在特定类容器内  漫蛙manwa官网登录界面_漫蛙漫画网页版主站入口  网易大神怎么保存别人动态的图片_网易大神动态图片保存方法  微信网页版扫码登录入口 微信网页版二维码登录入口  12306几点到几点不能订票? | 官方最新系统维护时间全解析  蛙漫画网页版全站入口 蛙漫热门作品免费浏览  俄罗斯浏览器官网直达链接 俄罗斯浏览器最新在线入口导航  Python:递归比较文件夹内容并找出特定类型文件的差异  内存检查:在VS Code中调试C++时的内存视图  J*aScript中针对特定容器内图片动画的实现教程  mc.js免安装版 mc.js一键畅玩入口  解决Python logging 中 datefmt 导致时间戳固定不变的问题  火锅吃太多会怎样 火锅吃太多会上火吗  如何高效处理PHP中的Excel数据导入导出?PortPHP/Spreadsheet助你轻松搞定!  c++中的std::forward_list和std::list有什么不同_c++ forward_list与list区别分析  Win10自动更新怎么关闭 Win10永久关闭系统更新的两种方法【终极版】  照顾宝贝2小游戏免费秒玩入口  解决macOS上安装pyhdf时‘hdf.h’文件缺失的编译错误  树莓派传感器触发:通过Twilio API发送WhatsApp消息教程  狙击外星人小游戏开始_狙击外星人小游戏立即开始  解决Python单元测试中Mock异常方法调用计数为零的问题 

搜索