问题描述
我使用 .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 (将#修改为@)