有关如何使用SignalR进行Forms身份验证或Windows身份验证的信息很多。我对使用自己的身份验证数据库感兴趣。我使用.NET客户端,因为连接代理是一项服务,而不是背后带有人员的Web浏览器。理想情况下,我希望客户代码使用:
hubConnection.Credentials = new NetworkCredential(userName, password);
我的服务器代码可以在中心上使用[Authorize],并可以使用Context.User。所有通讯都通过https进行,所以我不在乎纯文本。
我已经阅读了asp.net basic authentication指南,该指南显示了如何使用IHttpModule覆盖身份验证机制。但是,当我在HttpModule中断点代码时,似乎从未在来自.NET SignalR客户端的请求中设置“授权” header 。
我要做的只是简单地从客户端传递用户名和密码,并编写如何在服务器上进行身份验证的代码。这样难吗?没魔术没有事件目录。只是由我认证。
我目前可行的方法是设置自定义 header ,这些 header 在SignalR级别上解释(使用自定义AuthorizeAttribute),但是显然,“正确的方法”不是在授权级别上进行身份验证,而是由网络服务器执行在SignalR发生任何事情之前。
任何人都可以描述一个完整但简单的自定义身份验证的好的过程吗?
最佳答案
客户
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示例
关于asp.net-mvc-4 - 如何在SignalR(.NET客户端)中使用自定义基本身份验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18660075/