我该如何保护SignalR组?

时间:2016-10-17 06:53:44

标签: security signalr

我有一组具有授权规则的服务器端资源。作为示例,资源是“小部件”类型,并且每个小部件具有确定哪些用户可以访问小部件的访问控制列表。

小工具1

  • 用户A
  • 用户B

小工具2

  • 用户B
  • 用户C

我有一个用于“小部件”的SignalR中心,每个小部件都有一个组,即小部件1的组和小部件2的组。集线器通知小部件的属性何时发生变化。因此,如果小部件1被更改,则将通知用户a和用户b,但不通知用户c。

为了使事情进一步复杂化,我希望每个用户都能够选择是否接收给定小部件的通知。换句话说,他们将积极地加入和离开小组。

保留身份验证,我需要处理哪些授权安全问题?

我认为加入小组的行为会像这样:

class WidgetHub : Hub
{
    public Task ListenToWidget(string widgetId)
    {
        if (UserIsAuthorized(Context.User, widgetId)
        {
            return Groups.Add(Context.Connectionid, widgetId);
        }
        else
        {
            throw new UnauthorizedWidgetException(widgetId);
        }
    }
}

我需要覆盖集线器管道per SignalR documentation中的BuildRejoiningGroups上的默认行为,如下所示:

public class RejoingGroupPipelineModule : HubPipelineModule
{
    public override Func<HubDescriptor, IRequest, IList<string>, IList<string>> 
        BuildRejoiningGroups(Func<HubDescriptor, IRequest, IList<string>, IList<string>> 
        rejoiningGroups)
    {
        rejoiningGroups = (hb, request, listOfGroups) => 
        {
            List<string> allowedGroups = new List<string>();
            foreach (var group in listOfGroups)
            {
                if (UserIsAuthorized(request.User, group))
                {
                    allowedGroups.Add(group);
                }
            }
            return allowedGroups;
        };

        return rejoiningGroups;
    }
}

这是确保群组授权的要求程度吗?

我对SignalR文档here中的一条声明也有点困惑:

  

不要将群组用作安全机制

     

群组是收集相关用户的便捷方式,但它们是   不是限制访问敏感信息的安全机制。   当用户可以自动重新加入群组时尤其如此   在重新连接期间。相反,请考虑将特权用户添加到   角色并限制对集线器方法的访问仅限于该角色的成员。   有关基于角色限制访问的示例,请参阅   SignalR Hub的认证和授权。举个例子   在重新连接时检查用户对组的访问权限,请参阅使用   基团。

我不知道这是否适用于我描述的情况。我并不是真的将组用作授权机制,而是使用其他机制来保护组。但是,“(群组)不是限制访问敏感信息的安全机制”,这听起来好像我不应该以这种方式使用群组。

0 个答案:

没有答案