检查SignalR属性中的授权

Ale*_*lov 8 c# asp.net authorize servicestack signalr

我在ServiceStack上有一些服务,并在这个项目中使用SignalR.

现在,我想保护集线器连接(仅对经过身份验证的用户进行访问),但我使用ServiceStack框架身份验证..(不是asp.net身份验证)和ServiceStack的会话(写入AuthUserId ih此会话和身份验证标志).

因此,当用户尝试连接到集线器时 - 集线器必须检查身份验证...

(是的,我可以从Hub请求Cookie(例如,方法OnConnected),但是在Authorize Attribute中检查身份验证 - 我必须在此类中进行(不在集线器中)

(http://www.asp.net/signalr/overview/signalr-20/security/hub-authorization)

所以,我创建了课程

[AttributeUsage(AttributeTargets.Class, Inherited = false, AllowMultiple = false)]
public class AuthorizeMyAttribute : AuthorizeAttribute
{
   protected override bool UserAuthorized(System.Security.Principal.IPrincipal user)
   {
     //... how can i request Cookies? / or may be can access for ServiceStack session...
     //    and return true or false
   }
}
Run Code Online (Sandbox Code Playgroud)

我能做些什么?谢谢!

hal*_*r73 7

AuthorizeAttribute还有两个虚拟方法:

  • AuthorizeHubConnection(HubDescriptor hubDescriptor, IRequest request)
  • AuthorizeHubMethodInvocation(IHubIncomingInvokerContext hubIncomingInvokerContext, bool appliesToMethod)

http://msdn.microsoft.com/en-us/library/microsoft.aspnet.signalr.authorizeattribute(v=vs.118).aspx

两个方法的默认实现都UserAuthorized使用请求进行调用IPrincipal.

AuthorizeHubConnectionIRequest直接传递的.

AuthorizeHubMethodInvocation,您可以IRequest从以下方式访问对象IHubIncomingInvokerContext:hubIncomingInvokerContext.Hub.Context.Request.