Asp.net-Mvc

將 SignalR 與現有授權集成

  • May 30, 2014

我一直在研究將 SignalR 授權屬性與自定義授權提供程序(稱為 MVCAuthorization)集成的方法。所以我想知道,如何將現有的控制器和操作授權與我的 SignalR 集線器和方法集成?

我發現您可以檢索 IAuthorization 提供程序。

如果您將集線器視為控制器,將您的方法視為您的操作,您所要做的就是創建一個實現 IAuthorizeHubConnection 和 IAuthorizeHubMethodInvocation 的 SignalR 屬性

public class HubAuthorizeAttribute : Attribute, IAuthorizeHubConnection,IAuthorizeHubMethodInvocation
{
   public virtual bool AuthorizeHubConnection(HubDescriptor hubDescriptor, Microsoft.AspNet.SignalR.IRequest request)
   {
       IAuthorizationProvider authorizationProvider = DependencyResolver.Current.GetService<IAuthorizationProvider>();

       return authorizationProvider.IsAuthorizedController(hubDescriptor.Name);
   }

   public virtual bool AuthorizeHubMethodInvocation(IHubIncomingInvokerContext hubIncomingInvokerContext)
   {
       IAuthorizationProvider authorizationProvider = DependencyResolver.Current.GetService<IAuthorizationProvider>();

       return authorizationProvider.IsAuthorizedAction(hubIncomingInvokerContext.MethodDescriptor.Hub.Name, hubIncomingInvokerContext.MethodDescriptor.Name);
   }
}

然後您所要做的就是將屬性放在您的集線器或您想要授權的任何方法上

[HubAuthorize]
public class Message : Hub
{
   public void Send(string message)
   {
   }
}

引用自:https://stackoverflow.com/questions/14343531