如何在SignalR(.NET客户端)中使用自定义基本身份验证?

时间:2013-09-06 14:23:55

标签: asp.net-mvc-4 authentication iis signalr signalr.client

有很多关于如何使用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事件发生之前,网络服务器就会这样做。

任何人都可以描述一个完整但简单的自定义身份验证的好程序吗?

1 个答案:

答案 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