问题描述
我使用 .NET Framework(不是 .NET Core)创建了一个 SignalR 服务器。它工作正常。现在,我想为其添加自定义 JWT 身份验证。
聊天中心:
public class ChatHub : Hub
{
[Authorize]
public void Send(string name,string message)
{
Clients.All.broadcastMessage(name,message);
}
}
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 (将#修改为@)