微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决如何将自定义 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 举报,一经查实,本站将立刻删除。