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

如何在基于Open ID Connect的Blazor WASM中强制刷新Auth/ID Token

在.NET 8 Blazor WASM中强制刷新Auth0令牌以获取最新自定义声明

前提配置(Auth0端)

  • 登录Auth0控制台进入目标应用设置页
  • 找到Refresh Token板块,开启Refresh Token Rotation(推荐开启,提升安全性)
  • 确认应用的Allowed Callback URLs、Allowed Logout URLs、Allowed Web Origins配置正确,避免跨域拦截

Blazor WASM端配置

1. 确保请求令牌时包含offline_access Scope

在Program.cs的OIDC配置中添加该Scope,这是获取刷新令牌的必要条件:

builder.Services.AddOidcAuthentication(options =>
{
    builder.Configuration.Bind("Auth0", options.ProviderOptions);
    options.ProviderOptions.ResponseType = "code";
    // 基础Scope
    options.ProviderOptions.Scope.Add("openid");
    options.ProviderOptions.Scope.Add("profile");
    options.ProviderOptions.Scope.Add("email");
    // 添加离线访问Scope,用于获取刷新令牌
    options.ProviderOptions.Scope.Add("offline_access");
});

2. 实现强制刷新令牌的方法

在需要触发刷新的组件或服务中,注入AuthenticationStateProvider和NavigationManager,通过强制转换为RemoteAuthenticationStateProvider调用刷新逻辑:

@inject AuthenticationStateProvider _authenticationStateProvider
@inject NavigationManager NavigationManager

<button @onclick="ForceRefreshTokens">刷新令牌获取最新声明</button>

@code {
    private async Task ForceRefreshTokens()
    {
        if (_authenticationStateProvider is RemoteAuthenticationStateProvider remoteAuthProvider)
        {
            try
            {
                var refreshResult = await remoteAuthProvider.RefreshAsync();
                
                if (refreshResult.Succeeded)
                {
                    // 刷新成功,通知组件重新渲染以读取最新用户声明
                    StateHasChanged();
                }
                else
                {
                    // 刷新失败(如刷新令牌过期、用户会话失效),跳转至登录页
                    NavigationManager.NavigateTo("authentication/login");
                }
            }
            catch (Exception ex)
            {
                // 处理网络异常或其他错误
                Console.WriteLine($"令牌刷新失败: {ex.Message}");
                NavigationManager.NavigateTo("authentication/login");
            }
        }
    }
}

关键说明

  • RefreshAsync方法会自动向Auth0请求新的ID Token和Access Token,新令牌将包含最新的自定义声明
  • 刷新成功后调用StateHasChanged(),可让组件重新读取更新后的AuthenticationState,展示最新用户数据
  • 若刷新失败(比如刷新令牌已过期),需引导用户重新登录以获取新的有效令牌

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 05:42:42