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

Blazor 中实现 JWT 登录和授权,核心是前后端协同:后端签发并验证 token,前端安全存储、携带并控制访问。关键不在“能不能做”,而在于“每一步是否闭环”——登录拿 token、请求带 token、未授权时跳转、退出清 token,缺一不可。
用户提交账号密码后,后端验证通过,立即生成标准 JWT 并返回给前端。推荐封装为独立服务(如 IJWTHelper),避免逻辑散落。
SymmetricSecurityKey 和 HMAC-SHA256 签名,密钥从 appsettings.json 读取,不硬编码
name(ClaimTypes.Name),可选加 role、uid 等用于后续授权UserToken { Token: "...", ExpireTime: ..., IsSuccess: true }
Blazor WebAssembly(WASM)默认用 localStorage,Blazor Server 可选 cookie 或 SignalR 上下文透传;无论哪种,都要确保每次 API 请求头自动带上 Authorization: Bearer xxx。
await js.InvokeVoidAsync("localStorage.setItem", "authToken", token)
HttpClient,或在发送前动态注入:client.DefaultRequestHeaders.Authorization = new("Bearer", token)
AuthService 提供 GetTokenAsync() 方法JWT 本身不控制页面访问,必须由前端主动拦截。Blazor 没有内置“401 自动跳转”,需手动处理。
App.razor 或布局组件中检查 token 是否存在且未过期(可解析 payload 中 exp 字段)<authorizeview></authorizeview> 包裹,配合 NotAuthorized 模板跳转到登录页NavigationManager.NavigateTo("/login?returnUrl=" + Uri.EscapeDataString(currentUrl))
JWT 是无状态的,登出只需前端清除本地 token;但要注意“已签发未过期 token 仍可用”的事实,高安全场景需服务端维护黑名单或缩短有效期。
await js.InvokeVoidAsync("localStorage.removeItem", "authToken")
AuthenticationStateProvider(WASM)或注销 cookie(Server)sessionStorage 替代登出逻辑,它只是关闭标签页才失效,不符合主动登出语义基本上就这些。流程清晰、边界明确,就不容易在刷新页面丢状态、API 401 不跳转、token 过期后仍能进首页这类问题上踩坑。
以上就是Blazor JWT Token 登录和授权方法的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号