如何将自定义 JWT 令牌身份验证添加到 .NET Framework SignalR 服务器?

问题描述

我使用 .NET Framework(不是 .NET Core)创建了一个 SignalR 服务器。它工作正常。现在,我想为其添加自定义 JWT 身份验证。

聊天中心:

public class ChatHub : Hub
{
    [Authorize]
    public void Send(string name,string message)
    {
        Clients.All.broadcastMessage(name,message);
    }
}

我在 Hub 方法添加了 Authorize 属性

Startup.cs:

using Microsoft.AspNet.SignalR;
using Microsoft.AspNet.SignalR.Hubs;
using Microsoft.Owin;
using Microsoft.Owin.Cors;
using Microsoft.Owin.Security.OAuth;
using Owin;
using Signalrserver.Authorization;
using Signalrserver.Providers;

[assembly: OwinStartup(typeof(Signalrserver.Startup))]
namespace Signalrserver
{
    public class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            app.Map("/signalr",map =>
            {
                map.UseCors(CorsOptions.AllowAll);

                map.USEOAuthBearerAuthentication(new OAuthBearerAuthenticationoptions()
                {
                    Provider = new QueryStringOAuthBearerProvider()
                });

                map.RunSignalR();
            });
        }
    }
}

QueryStringOAuthBearerProvider:

using System;
using System.Threading.Tasks;
using Microsoft.Owin.Security.OAuth;

namespace Signalrserver.Providers
{
    public class QueryStringOAuthBearerProvider : OAuthBearerAuthenticationProvider
    {
        public override Task RequestToken(OAuthRequestTokenContext context)
        {
            var value = context.Request.Query.Get("token");

            if (!string.IsNullOrEmpty(value))
            {
                context.Token = value;
            }

            return Task.Fromresult<object>(null);
        }
    }
}

我想做什么?

我希望所有 SignalR 客户端在查询字符串中发送 JWT 令牌。我将在 QueryStringOAuthBearerProvider 的 RequestToken 方法自定义验证此令牌。如果验证成功,则应调用受 Authorize 属性保护的 Hub 方法,否则请求将被拒绝。

请告知如何实现这一点以及我在这里缺少什么。

PS:我想做与 here 完全相同的事情,但使用 .NET Framework(不是 .NET Core)

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)