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

Blazor Server登录后JWT访问异常及GetAuthenticationStateAsync重复调用问题求助

Blazor Server登录后JWT访问异常及GetAuthenticationStateAsync重复调用问题求助

我在Blazor Server项目里调用外部API做身份验证,API会返回JWT令牌。目前已经实现了一些基础逻辑,但遇到了棘手的问题,想请教各位大佬:

已实现的相关逻辑

  1. 登录时存储JWT:我用ProtectedLocalStorage来保存令牌,代码如下:
await protectedLocalStorage.SetAsync("authToken", result.Data.Token);
  1. 自定义AuthenticationStateProvider处理授权:我写了一个CustomAuthenticationStateProvider,用来读取本地存储的令牌、解析声明,同时给HttpClient的请求头加上授权信息,代码如下:
public override async Task<AuthenticationState> GetAuthenticationStateAsync()
{
    ProtectedBrowserStorageResult<string> token;
    var anonymous = new ClaimsPrincipal(new ClaimsIdentity());

    try
    {
        try
        {
            token = await _protectedBrowserStorage.GetAsync<string>("authToken");
        }
        catch
        {
            token = new();
        }

        if (!token.Success)
        {
            return new AuthenticationState(anonymous);
        }

        httpClient.DefaultRequestHeaders.Authorization =
            new AuthenticationHeaderValue("Bearer", token.Replace("\"", ""));
        var identity = new ClaimsIdentity(ParseClaimsFromJwt(token.Value), "jwt");
        var user = new ClaimsPrincipal(identity);

        return await Task.FromResult(new AuthenticationState(user));
    }
    catch (Exception exc)
    {
        return new AuthenticationState(anonymous);
    }
}
  1. 登出时删除令牌:
await protectedLocalStorage.DeleteAsync("authToken");

遇到的问题

  • 登录后GetAuthenticationStateAsync重复调用:登录完成后,这个方法会被调用两次。第一次调用的时候,_protectedBrowserStorage根本拿不到值,还会抛出这个异常:

JavaScript interop calls cannot be issued at this time
我猜测第一次调用时机太早,Blazor还没准备好进行JS互操作,但不确定具体原因。

  • 登录后跳转页面无法读取令牌:更关键的是,登录成功后跳转到其他页面,GetAuthenticationStateAsync里的_protectedBrowserStorage还是返回null!明明令牌已经存在本地存储里了,但就是获取不到,导致后续的API请求都带不上授权头,业务逻辑没法正常走。

有没有大佬能帮我分析下原因,以及怎么解决这个问题,让我能在登录后的所有页面都正常读取到令牌呢?

备注:内容来源于stack exchange,提问作者Ahmed

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.15 09:48:06