7

有很多关于如何使用 SignalR 进行表单身份验证或 Windows 身份验证的信息。我有兴趣使用我自己的身份验证数据库。我使用 .NET 客户端是因为连接代理是一项服务,而不是背后有人支持的 Web 浏览器。理想情况下,我希望我的客户端代码使用:

hubConnection.Credentials = new NetworkCredential(userName, password);

我的服务器代码在集线器上使用 [Authorize] 并让 Context.User 可供我使用。所有通讯都通过 https,所以我不在乎纯文本。

我已经阅读了 asp.net基本身份验证指南,其中展示了如何使用 IHttpModule 覆盖身份验证机制。但是,当我在 HttpModule 中对代码进行断点时,似乎从未在来自 .NET SignalR 客户端的请求中设置“授权”标头。

我想要做的只是从客户端简单地传递一个用户名和一个密码,然后编写如何在服务器上进行身份验证的代码。有这么难吗?没有魔法。没有活动目录。只是我的认证。

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

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

4

1 回答 1

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

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

于 2013-09-06T17:43:43.173 回答