在从Web访问的自托管SignalR服务器中实现授权

Ric*_*ahl 6 signalr signalr-hub signalr.client

我正在寻找关于如何在自托管(非IIS)环境中运行的后端服务上实现SignalR的授权安全性的一些指导,该环境是从Web应用程序调用的.后端应用程序基本上是一个监视器,可以将SignalR事件激发回基于HTML的客户端.这一切都很好(实际上非​​常好).

但是,我们需要从Web站点限制对经过身份验证的用户的服务器访问.所以基本上如果用户在网站上进行了身份验证,我们需要在后端应用程序中以某种方式获取凭据(用户名就足够了)和验证状态,以决定是否允许连接以避免未经授权的访问.

任何人都可以指出如何完成这种授权转发的一些策略或模式?

Abh*_*nda 2

SignalR 不提供任何额外的身份验证功能。相反,它旨在与应用程序的身份验证机制配合使用。

\n\n

集线器

\n\n

您应该像平常一样进行身份验证,然后使用 SignalR 提供的授权属性在集线器上强制执行身份验证的结果。

\n\n

授权属性可以应用于整个 Hub 或 Hub 中的特定方法。一些例子:

\n\n
    \n
  • [授权] \xe2\x80\x93 仅经过身份验证的用户
  • \n
  • [Authorize(Roles = "Admin,Manager")] \xe2\x80\x93 仅指定 .NET 角色中经过身份验证的用户
  • \n
  • [Authorize(Users = "user1,user2")] \xe2\x80\x93 仅具有指定用户名的经过身份验证的用户
  • \n
\n\n

您还可以通过在 Application_Start 方法中添加以下方法来要求所有 Hub 都需要身份验证:

\n\n
\n

GlobalHost.HubPipeline.RequireAuthentication();

\n
\n\n

持久连接

\n\n

您可以使用请求中的用户对象来查看用户是否通过身份验证:

\n\n
\n

request.User.IsAuthenticated

\n
\n

  • 我没有使用 ASP.NET 来托管此 SignalR 服务,因此我认为这不起作用,因为没有 ASP.NET 安全性或身份需要检查。我知道 SignalR 不提供内置身份验证,这很好。我所要求的想法是如何跨应用程序传递安全上下文,然后如何一般性地处理身份验证,而不必在每个集线器方法中进行多次调用来验证安全性。 (3认同)