【问题标题】:How do I use custom basic authentication with SignalR (.NET client)?如何通过 SignalR(.NET 客户端)使用自定义基本身份验证?
【发布时间】:2013-09-10 16:33:10
【问题描述】:

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

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

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

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

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

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

谁能描述一个完整但非常简单的自定义身份验证的好程序?

【问题讨论】:

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


    【解决方案1】:

    客户

    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

    【讨论】:

    • Owin 的东西是如果你是自托管的,对吧?我将托管在 IIS 中并且不会有 app.Anything() 我认为。我很惊讶不只是“提供一个 ValidateUser 方法然后你就走”
    • 您可以使用托管在 IIS 上的 Owin
    • 我整天都在寻找 Microsoft.Owin.Security.Basic NuGet 包。它不再位于 nuget.org。它在不同的 NuGet 服务器上吗?在 Katana 项目网站上,它说该软件包是随版本 2.0.0.0 发布的。感谢您的帮助。
    • 还有没有客户端没有明文用户名和密码的解决方案?
    • 我也找不到 Microsoft.Owin.Security.Basic。相反,我使用 SignalR 测试用例中的代码:github.com/SignalR/SignalR/blob/…
    猜你喜欢
    • 2011-02-13
    • 2014-02-07
    • 2014-08-07
    • 1970-01-01
    • 1970-01-01
    • 2011-06-25
    • 1970-01-01
    • 2014-04-01
    • 1970-01-01
    相关资源
    最近更新 更多