有很多关于如何使用SignalR进行Forms身份验证或Windows身份验证的信息。我有兴趣使用自己的身份验证DB。我使用的是.NET客户端,因为连接代理是一种服务,而不是支持人类的Web浏览器。理想情况下,我喜欢使用客户端代码:
hubConnection.Credentials = new NetworkCredential(userName, password);
我的服务器代码在集线器上使用[授权]并且可以使用Context.User。所有的通讯都是通过https,所以我不关心纯文本。
我已阅读asp.net basic authentication指南,该指南介绍了如何使用IHttpModule覆盖身份验证机制。但是,当我断开HttpModule中的代码时,似乎永远不会在来自.NET SignalR客户端的请求中设置'Authorization'标头。
我想要做的就是从客户端轻松传递用户名和密码,并编写服务器上的身份验证方式。那么难吗?没有魔法。没有Active Directory。只是由我认证。
我现在的工作方法是设置在SignalR级别解释的自定义标头(使用自定义AuthorizeAttribute),但显然“正确的方法”不是在授权级别进行身份验证而是在任何SignalR事件发生之前,网络服务器就会这样做。
任何人都可以描述一个完整但简单的自定义身份验证的好程序吗?
答案 0 :(得分:5)
客户端
var connection = new Connection(url + "/echo");
connection.Credentials = new NetworkCredential("user", "password");
await connection.Start();
服务器
app.Map("/basicauth", map =>
{
map.UseBasicAuthentication(new BasicAuthenticationProvider());
map.MapSignalR<AuthenticatedEchoConnection>("/echo");
map.MapSignalR();
});
需要NuGet包:Microsoft.Owin.Security.Basic
您可以看到完整的示例here