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

Blazor Server中如何携带身份认证调用内部API?

解决Blazor调用API时身份认证信息无法传递的问题

问题核心

Blazor的HttpClient不会自动携带登录后的认证令牌,导致API控制器无法通过GetUserAsync获取当前用户,即便你已在Blazor页面完成登录。

解决方案步骤

  1. 在Blazor页面注入认证状态服务
    在你的Blazor页面代码顶部注入所需服务:

    @inject AuthenticationStateProvider AuthenticationStateProvider
    @inject HttpClient HttpClient
    
  2. 获取认证令牌并附加到请求头
    修改MyAction方法,先获取当前用户的认证令牌,再将其添加到HttpClient的请求头中:

    private async Task MyAction()
    {
        var authState = await AuthenticationStateProvider.GetAuthenticationStateAsync();
        var user = authState.User;
    
        if (user.Identity.IsAuthenticated)
        {
            // 获取访问令牌
            var token = await AuthenticationStateProvider.GetTokenAsync("access_token");
            // 添加Authorization头
            HttpClient.DefaultRequestHeaders.Authorization = 
                new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", token);
        }
    
        var result = await HttpClient.DeleteAsync($"/api/mycontroller/delete/{someId}");
    }
    

    注意:如果你的令牌类型不是Bearer,需对应修改认证头的方案名称;同时要确保Identity配置中已启用令牌发放逻辑。

  3. 确保API控制器启用授权
    在API控制器或DoSomething方法上添加[Authorize]属性,确保只有认证用户能访问,这样User对象才会被正确填充:

    [Authorize]
    [HttpDelete("delete/{id}")]
    public async Task<IActionResult> DoSomething(int id)
    {
        var user = await userManager.GetUserAsync(User);
        // 后续业务逻辑
        return Ok();
    }
    
  4. 验证认证方案配置
    检查Startup/Program.cs中的认证配置,确保默认方案为Identity.Application:

    builder.Services.AddAuthentication(options =>
    {
        options.DefaultScheme = IdentityConstants.ApplicationScheme;
        options.DefaultChallengeScheme = IdentityConstants.ApplicationScheme;
    })
    .AddIdentityCookies();
    

为什么IHttpContextAccessor行不通?

Blazor WebAssembly运行在浏览器客户端,不存在服务器端的HttpContext,因此通过IHttpContextAccessor修改请求头完全无效。正确的做法是在客户端直接操作HttpClient的请求头,手动携带认证令牌。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 13:32:06