You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure App Service上Blazor WASM+EasyAuth缓存致认证流程阻塞问题

Azure Web App + EasyAuth + Blazor WASM 缓存引发的认证阻塞问题

我在Azure Web App上通过EasyAuth配置Microsoft身份提供商后,99.9%的场景运行正常,但特定场景下浏览器会报CORS策略错误,刷新页面即可恢复,因此怀疑这并非真正的CORS问题。

该Web App使用仅允许Entra/AD租户用户访问的应用注册,正常流程是引导用户通过https://login.windows.net/{tenantId}/oauth2/v2.0/authorize完成登录后返回应用。已登录用户可直接访问内容,我通过/.auth/me接口提取令牌用于API调用:令牌过期时自动刷新,令牌缺失则强制触发页面刷新并重认证。

问题场景

当浏览器存有Blazor WASM缓存(用户曾登录过)但用户已完全登出时,应用会卡在wwwroot/index.html加载页,无法进入App.razor启动流程。刷新页面后可正常进入登录流程,通过调用/.auth/logout操作可稳定复现该问题。

已执行的排查与配置

我已将_framework/blazor.boot.json等相关路径添加到应用注册的重定向URI列表、Web App的CORS设置中,但问题仍未解决。浏览器日志显示,在认证重定向触发前,有未缓存的文件被请求并触发报错,这疑似是问题根源,但刷新即可解决的现象暗示此处存在竞态条件。

临时解决方案

我在强制刷新逻辑中实现了URL缓存破译者来绕过缓存限制,但该方案无法覆盖用户主动返回(如浏览器后退操作)且会话已过期的场景,现寻求更完善的解决方案。

临时方案代码:

var currentUri = _navigationManager.Uri;

// 添加缓存破译者,避免缓存问题阻塞认证流程
string cacheBuster = $"?cb={DateTime.Now.Ticks}"; 
if(currentUri.Contains("?"))
{
    cacheBuster = cacheBuster.Replace("?", "&");
}
currentUri = currentUri + cacheBuster;

_navigationManager.NavigateTo(currentUri, true); //<-- 强制重载以重新认证

内容的提问来源于stack exchange,提问作者INNVTV

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 14:57:28