Signal R 未通过 B2C 身份验证向特定用户 ClaimTypes.NameIdentifier 发送通知

发布于 2025-01-15 19:00:41 字数 1523 浏览 0 评论 0原文

我正在使用 Azure B2C 在客户端进行身份验证。当我尝试调用发送通知时,它没有发送通知。

      public async Task SendNotifications(IEnumerable<NotificationServiceModel> notifications)
        {
            foreach (NotificationServiceModel notification in notifications)
            {
                string userId= httpContextAccessor.HttpContext.User.FindFirst(ClaimTypes.NameIdentifier).Value;
                await hubContext.Clients.User(userId).SendAsync(ReceiveNotification, notification);
            }
        }

我正在使用 Azure b2c 身份验证,其中包含 UserId,

 services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
                .AddMicrosoftIdentityWebApi(
                options =>
                {
                    Configuration.Bind("AzureAdB2C", options);
            
                    options.TokenValidationParameters.NameClaimType = "name";
            
                },
                options =>
                {
                    Configuration.Bind("AzureAdB2C", options);
                });

这里是 Hub 映射

 app.UseEndpoints(endpoints =>
            {
                endpoints.MapHub<NotificationsHub>("/api/notifications");
                endpoints.MapHub<OutlookHub>("/api/outlook");
                endpoints.MapHub<EventsHub>("/api/live/events");

                endpoints.MapControllerRoute(
                    "default",
                    "{controller}/{action=Index}/{id?}");
            });

I am using Azure B2C for authentication on Client Side. When I am trying to invoke the Send Notification it is not sending notification.

      public async Task SendNotifications(IEnumerable<NotificationServiceModel> notifications)
        {
            foreach (NotificationServiceModel notification in notifications)
            {
                string userId= httpContextAccessor.HttpContext.User.FindFirst(ClaimTypes.NameIdentifier).Value;
                await hubContext.Clients.User(userId).SendAsync(ReceiveNotification, notification);
            }
        }

I am using Azure b2c Authentication with claimType Name which contains UserId

 services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
                .AddMicrosoftIdentityWebApi(
                options =>
                {
                    Configuration.Bind("AzureAdB2C", options);
            
                    options.TokenValidationParameters.NameClaimType = "name";
            
                },
                options =>
                {
                    Configuration.Bind("AzureAdB2C", options);
                });

here is Hub Mapping

 app.UseEndpoints(endpoints =>
            {
                endpoints.MapHub<NotificationsHub>("/api/notifications");
                endpoints.MapHub<OutlookHub>("/api/outlook");
                endpoints.MapHub<EventsHub>("/api/live/events");

                endpoints.MapControllerRoute(
                    "default",
                    "{controller}/{action=Index}/{id?}");
            });

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

吝吻 2025-01-22 19:00:41

我看到:

options.TokenValidationParameters.NameClaimType = "name";

但是然后使用 ClaimTypes.NameIdentifier (SignalR 默认使用的)。

我只是验证这些是否一致且正确。

I see:

options.TokenValidationParameters.NameClaimType = "name";

But then the use of ClaimTypes.NameIdentifier (which SignalR uses by default).

I would just verify these are consistent and correct.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文