Blazor服务器身份验证JWT适用于除Web应用程序以外的所有SignalR
创始人
2024-12-21 07:30:12
0

在 Blazor 服务器应用程序中使用 JWT 进行身份验证通常是很简单的,但是如果要在 SignalR 中使用 JWT,则需要一些额外的步骤。

首先,需要在 StartUp 类的 ConfigureServices 方法中添加以下代码:

services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
    .AddJwtBearer(options =>
    {
        options.TokenValidationParameters = new TokenValidationParameters
        {
            ValidateIssuer = true,
            ValidateAudience = true,
            ValidateLifetime = true,
            ValidateIssuerSigningKey = true,
            ValidIssuer = Configuration["Jwt:Issuer"],
            ValidAudience = Configuration["Jwt:Audience"],
            IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Configuration["Jwt:Key"]))
        };

        options.Events = new JwtBearerEvents
        {
            OnMessageReceived = context =>
            {
                var accessToken = context.Request.Query["access_token"];
                var path = context.HttpContext.Request.Path;
                if (!string.IsNullOrEmpty(accessToken) && path.StartsWithSegments("/chat"))
                {
                    context.Token = accessToken;
                }
                return Task.CompletedTask;
            }
        };
    });

services.AddSignalR();

这个代码段配置了身份验证和 SignalR,并设置了 JWT 的验证参数和事件。在 OnMessageReceived 事件中,将访问令牌分配给 SignalR 请求。

接下来,可以在 SignalR Hub 中进行身份验证。添加以下代码到 Hub 类中:

[Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)]
public class ChatHub : Hub
{
    // ...
}

该代码会将 JWT 认证方案添加到聊天 Hub 中,从而保护 SignalR 的所有方法。不带正确令牌的客户端将无法连接到 Hub、调用或接收方法。

最后,需要在客户端上设置 JWT 令牌。可以在 Blazor 组件中获取令牌,并通过 SignalR 连接发送它。

以下是包含 SignalR 和 JWT 认证的 Blazor 组件的示例代码:

@inject IAccessTokenProvider TokenProvider
@inject NavigationManager NavigationManager
@using Microsoft.AspNetCore.Authentication.JwtBearer
@using Microsoft.AspNetCore.Http.Connections.Client
@using System.Net.Http.Json


    
        
        
        
        

相关内容

热门资讯

一分钟了解(wopoker)外... 一分钟了解(wopoker)外挂透明挂辅助软件(软件透明挂)一般真的有挂(2023已更新)(小红书)...
推荐十款(wepoke)外挂透... 推荐十款(wepoke)外挂透明挂辅助安装(智能ai代打)的确是有挂的(2020已更新)(百度)1、...
科普(WepokE)外挂透明挂... 科普(WepokE)外挂透明挂辅助插件(透视辅助)的确是有挂的(2025已更新)(头条)1、起透看视...
最新研发(wpK)外挂透明挂辅... 最新研发(wpK)外挂透明挂辅助工具(透视)就是真的有挂(2022已更新)(小红书)1、系统规律教程...
重大推荐(云扑克app)外挂透... 重大推荐(云扑克app)外挂透明挂辅助脚本(软件透明挂)总是真的有挂(2020已更新)(百度)辅助器...
必备科技(poker worl... 必备科技(poker world)外挂透明挂辅助器(透视辅助)都是真的有挂(2024已更新)(微博热...
重大推荐(we辅助poker)... 重大推荐(we辅助poker)外挂透明挂辅助脚本(透视辅助)一贯真的有挂(2023已更新)(百度)w...
一分钟了解(来玩德州)外挂透明... 一分钟了解(来玩德州)外挂透明挂辅助插件(透视辅助)原来真的有挂(2025已更新)(微博热搜)1、一...
一分钟了解(轰趴大菠萝)外挂透... 一分钟了解(轰趴大菠萝)外挂透明挂辅助安装(辅助挂)原来真的有挂(2022已更新)(知乎)1、每一步...
玩家必用(AAPOKEr)外挂... 玩家必用(AAPOKEr)外挂透明挂辅助工具(智能ai代打)果然真的有挂(2021已更新)(今日头条...