I realized that you can get an IAuthorization provider.
If you consider you as a hub as a controller and your methods as your actions, all you have to do is create a SignalR attribute that implements IAuthorizeHubConnection and IAuthorizeHubMethodInvocation
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); } }
Then all you have to do is put the attribute in a hub or any methods you want to allow.
[HubAuthorize] public class Message : Hub { public void Send(string message) { } }
source share