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

Rob*_*bin 6 authentication iis asp.net-mvc-4 signalr signalr.client

有很多关于如何使用SignalR进行Forms身份验证或Windows身份验证的信息.我有兴趣使用自己的身份验证DB.我使用的是.NET客户端,因为连接代理是一种服务,而不是支持人类的Web浏览器.我理想情况下喜欢我的客户端代码:

hubConnection.Credentials = new NetworkCredential(userName, password);
Run Code Online (Sandbox Code Playgroud)

我的服务器代码在集线器上使用[授权]并且可以使用Context.User.所有的通讯都是通过https,所以我不关心纯文本.

我已经阅读了asp.net 基本认证指南,该指南展示了如何使用IHttpModule覆盖认证机制.但是,当我断开HttpModule中的代码时,似乎永远不会在来自.NET SignalR客户端的请求中设置'Authorization'标头.

我想要做的就是从客户端轻松传递用户名和密码,并编写服务器上的身份验证方式.那么难吗?没有魔法.没有Active Directory.只是由我认证.

我当前的工作方法是设置在SignalR级别解释的自定义标头(使用自定义AuthorizeAttribute),但显然"正确的方法"不是在授权级别进行身份验证而是让网络服务器执行在任何SignalR事件发生之前.

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

Gus*_*nta 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

您可以在此处查看完整示例

  • 我一直在寻找Microsoft.Owin.Security.Basic NuGet Package.它不再是nuget.org了.它是在不同的NuGet服务器上吗?在Katana项目网站上,它说该软件包是在2.0.0.0版本下发布的.谢谢您的帮助. (5认同)