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

Blazor Server(.NET 8)中Microsoft Identity认证HubConnection遇403问题

问题解决:Blazor Server SignalR HubConnection 403 Forbidden 及 AccessToken 获取方法

1. 获取 AccessToken 的正确方式

在 Blazor Server 组件中,通过注入 ITokenAcquisition 服务获取用户访问令牌,替换空白的 AccessTokenProvider 逻辑:

首先在组件顶部注入服务:

@inject ITokenAcquisition TokenAcquisition

修改 OnInitializedAsync 中的配置:

protected override async Task OnInitializedAsync()
{
    hubConnection = new HubConnectionBuilder()
        .WithUrl(NavigationManager.ToAbsoluteUri("/chatservice"), options =>
        {
            options.AccessTokenProvider = async () =>
            {
                // 替换为你的应用API范围,格式:api://{Azure AD应用ID}/自定义范围名称
                var scope = "api://your-azure-ad-app-id/access_as_user";
                return await TokenAcquisition.GetAccessTokenForUserAsync(new[] { scope });
            };
        })
        .Build();

    hubConnection.On<string, string>("ReceiveMessage", (user, message) =>
    {
        userMessages.Add(new UserMessage { Username = user, Message = message, isCurrentUser = user == usernameInput, DateSent = DateTime.Now });
        this.InvokeAsync(() => this.StateHasChanged());
    });

    await hubConnection.StartAsync();
}

2. 后端 Hub 配置授权

给 ChatService Hub 添加 [Authorize] 属性,限制仅授权用户可连接:

using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.SignalR;

[Authorize]
public class ChatService : Hub
{
    // 你的Hub业务逻辑
}

3. Azure AD 应用注册调整

  • 添加自定义 API 范围:
    1. 进入 Azure AD 应用注册页面,找到你的应用,切换到「公开 API」选项卡
    2. 添加自定义范围(如 access_as_user),设置受众为「已授权的客户端应用」并勾选当前应用
  • 更新回复 URL:
    在「身份验证」选项卡中,添加 Azure App Service 完整回调 URL,格式:https://your-app-service-name.azurewebsites.net/signin-oidc
  • 配置 App Service 身份验证:
    在 Azure 门户的 App Service 「身份验证」选项中,启用「Microsoft 身份验证提供者」,关联你的 Azure AD 应用,并将「未认证请求」设置为「重定向到登录页」

4. 优化 Program.cs 配置

补充 AddMicrosoftIdentityWebApi 以完善 API 授权支持,确保认证中间件顺序正确:

builder.Services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)
    .AddMicrosoftIdentityWebApp(builder.Configuration.GetSection("AzureAd"))
    .AddMicrosoftIdentityWebApi(builder.Configuration.GetSection("AzureAd"));

本地与部署差异说明

本地运行时依赖 localhost 回调 URL,Azure AD 默认允许本地测试;部署到 App Service 后,必须保证应用注册的回复 URL、API 范围、App Service 身份验证配置完全匹配,否则会触发 403 禁止访问错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 07:38:33