Asp.net mvc 4 如何对信号器(.NET客户端)使用自定义基本身份验证?

Asp.net mvc 4 如何对信号器(.NET客户端)使用自定义基本身份验证?,asp.net-mvc-4,authentication,iis,signalr,signalr.client,Asp.net Mvc 4,Authentication,Iis,Signalr,Signalr.client,关于如何使用Signal进行窗体身份验证或Windows身份验证,有很多信息。我对使用自己的身份验证数据库感兴趣。我使用.NET客户端是因为连接代理是一种服务,而不是一个有人支持的web浏览器。理想情况下,我希望我的客户机代码使用: hubConnection.Credentials = new NetworkCredential(userName, password); 以及我的服务器代码,以便在集线器上使用[Authorize],并使Context.User对我可用。所有通信都通过http

关于如何使用Signal进行窗体身份验证或Windows身份验证,有很多信息。我对使用自己的身份验证数据库感兴趣。我使用.NET客户端是因为连接代理是一种服务,而不是一个有人支持的web浏览器。理想情况下,我希望我的客户机代码使用:

hubConnection.Credentials = new NetworkCredential(userName, password);
以及我的服务器代码,以便在集线器上使用[Authorize],并使Context.User对我可用。所有通信都通过https,所以我不关心纯文本

我已经阅读了asp.net指南,其中介绍了如何使用IHttpModule覆盖身份验证机制。然而,当我在HttpModule中对代码进行断点时,.NET SignalR客户端发出的请求中似乎从未设置“Authorization”头

我所要做的只是从客户端传递一个用户名和密码,并编码如何在服务器上进行身份验证。这么难吗?没有魔法。没有Active Directory。我只是验证一下

我目前正在工作的方法是设置在信号器级别解释的自定义头(使用自定义AuthorizeAttribute),但是显然“正确的方法”不是在授权级别进行身份验证,而是让Web服务器在任何信号器事件发生之前进行身份验证

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

客户端


var连接=新连接(url+“/echo”);
connection.Credentials=新的网络凭据(“用户”、“密码”);
等待连接。开始();

服务器


app.Map(“/basicauth”,Map=>
{
使用BasicAuthentication(新的BasicAuthenticationProvider());

map.mapsigner

Owin的内容是如果你是自托管的,对吗?我将在IIS中托管,不会有app.Anything()我想。我很惊讶这里不仅仅有“提供一个ValidateUser方法,然后你就可以使用iiI上托管的Owin”。我已经搜索了一整天的Microsoft.Owin.Security.Basic NuGet程序包。它不再在NuGet.org上了。它在另一台NuGet服务器上吗?在Katana项目网站上,它说该程序包是用版本2.0.0.0发布的anks寻求帮助。是否有另一种解决方案在客户端没有明文形式的用户名和密码?我也找不到Microsoft.Owin.Security.Basic。我使用SignalR测试用例中的代码: