我在 ServiceStack 上有一些服务,并在这个项目中使用 SignalR。
现在,我想保护集线器连接(仅对经过身份验证的用户进行访问),但我使用ServiceStack框架身份验证..(不是asp.net身份验证)和ServiceStack会话(在此会话和身份验证标志中写入AuthUserId)。
因此,当用户尝试连接到集线器时 - 集线器必须检查身份验证......
(是的,我可以从 Hub 请求 Cookie(例如 OnConnected 方法),但 SignalR 检查授权属性中的身份验证 - 我必须在此类中执行此操作(而不是在 hub 中)
(http://www.asp.net/signalr/overview/signalr-20/security/hub-authorization 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
}
}
我能为它做什么?
谢谢!
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 http://msdn.microsoft.com/en-us/library/microsoft.aspnet.signalr.authorizeattribute(v=vs.118).aspx
两种方法的默认实现都调用UserAuthorized
与请求的IPrincipal
.
AuthorizeHubConnection
被传递了一个IRequest http://msdn.microsoft.com/en-us/library/microsoft.aspnet.signalr.irequest%28v=vs.118%29.aspx直接地。
In AuthorizeHubMethodInvocation
,您可以访问IRequest
对象从IHubIncomingInvokerContext
像这样:hubIncomingInvokerContext.Hub.Context.Request
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)