Blazor WASM无法获取已存在Cookie问题求助
问题根源
你设置Cookie时开启了HttpOnly = true,这个属性的核心作用就是禁止前端JavaScript读取Cookie,所以你的JS方法getCookie根本拿不到authToken的值,自然Blazor代码里的token始终是null。
解决方案
分两种场景处理,优先选第一种(安全性更高):
方案一:保持HttpOnly,让HttpClient自动携带Cookie(推荐)
HttpOnly是防范XSS攻击的重要手段,不建议随意关闭。Blazor的HttpClient在同域请求时会自动携带Cookie,无需手动获取。修改你的Blazor代码:
protected override async Task OnInitializedAsync() { try { // 直接调用API,HttpClient会自动带上authToken Cookie posts = await httpClient.GetFromJsonAsync<List<Post>>("api/post/list"); Console.WriteLine("List Refreshed"); } catch (HttpRequestException) { // 请求失败说明Cookie无效或未携带,跳转到登录页 NavigationManager?.NavigateTo("/loginx"); } }
注意:如果Blazor应用和API不在同域,需要在API的CORS配置中允许携带凭证(添加AllowCredentials()),同时前端HttpClient要设置WithCredentials = true。
方案二:关闭HttpOnly(不推荐,存在安全风险)
如果确实需要前端JS读取Cookie,把API里的CookieOptions中的HttpOnly改为false:
DateTime expirationTime = DateTime.UtcNow.AddHours(1); Response.Cookies.Append("authToken", token, new CookieOptions { HttpOnly = false, // 修改为false Secure = true, SameSite = SameSiteMode.None, Expires = expirationTime, Domain = "localhost", Path = "/", });
⚠️ 风险提示:关闭HttpOnly后,一旦页面遭遇XSS攻击,攻击者可通过JS窃取authToken Cookie,直接导致用户账号被盗。
内容的提问来源于stack exchange,提问作者Tutorial Hell Veteran
相关产品推荐
相关产品推荐

