我有一组具有授权规则的服务器端资源。作为示例,资源是“小部件”类型,并且每个小部件具有确定哪些用户可以访问小部件的访问控制列表。
小工具1
小工具2
我有一个用于“小部件”的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的认证和授权。举个例子 在重新连接时检查用户对组的访问权限,请参阅使用 基团。
我不知道这是否适用于我描述的情况。我并不是真的将组用作授权机制,而是使用其他机制来保护组。但是,“(群组)不是限制访问敏感信息的安全机制”,这听起来好像我不应该以这种方式使用群组。