![](/img/trans.png)
[英]SignalR Hub Authorization for Blazor WebAssembly with Identity
[英]SignalR notifications for Blazor WebAssembly
我有 Blazor WebAssembly 客户端应用程序和带有 Microsoft Identity 的 ASPCore WebAPI,我想从服务器向特定用户发送通知。
我对如何实现这一点的第一个想法是发送这样的通知:
public async System.Threading.Tasks.Task SendPushNotification(ClaimsPrincipal user, string someNotificationMessage)
{
string userGuid = user.FindFirst(ClaimTypes.NameIdentifier).Value;
await _hubContext.Clients.All.SendAsync("notification", userGuid, someNotificationMessage);
}
在客户端检查身份,但我什至还没有弄清楚如何在 blazor 客户端上获取身份。?
但我认为肯定有更好的方法。 拜托,你能告诉我如何向特定用户发送通知吗?
SignalR 内置了对从指定客户端调用方法的支持。 因此,默认情况下,它依赖于 ClaimTypes.NameIdentifier 类型的 Claim 来区分不同的用户。
await _hubContext.Clients.User(userGuid).SendAsync("notification", someNotificationMessage);
要使其正常工作,您必须在从 Blazor 客户端组件建立 HubConnection 时将用户的 JWT 令牌传递给集线器。
必须将以下服务注入 Razor 组件:
@inject NavigationManager navigationManager
@inject IAccessTokenProvider tokenProvider
@code 部分中 OnInitializedAsync 方法的主体可能如下所示:
if (((await AuthState).User).Identity.IsAuthenticated)
{
AccessToken token = new AccessToken();
(await tokenProvider.RequestAccessToken()).TryGetToken(out token);
if (token is not null)
{
hubConnection = new HubConnectionBuilder()
.WithUrl(NavigationManager.ToAbsoluteUri("/{hubName}"), options =>
{
options.AccessTokenProvider = async () => token.Value;
})
.Build();
await hubConnection.StartAsync();
hubConnection.On<string>("notification", message =>
{
snackBar.Add(message, Severity.Info);
});
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.