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
相关产品推荐
相关产品推荐

