繁体   English   中英

使用signaler PersistentConnection和websockets传输进行自定义授权

[英]Custom Authorization using signalr PersistentConnection with websockets transport

我正在尝试授权用户进行SignalR中的某些连接,我的问题是,使用WebSockets作为传输方式,我不能在没有异常的情况下设置HttpContext.Current.User。 授权对象还需要可以从控制器访问,并且那里的身份验证是使用IFilter实现在整个Web-api部分中自定义的。

在升级到支持Websocket的2012服务器之前,我们必须使用HttpContext.Current.User,一切正常,通过SignalR查看替代方案,[AuthorizeAttribute]有一个实现,但仅适用于Hubs(和我不确定使用Websockets时更改HttpContext.Current.User不会引发异常)。

在此先感谢图腾。

事实证明,我在管道中做的太晚了,而不是在检查OnConnected或OnAuthorizeRequest时检查标头以验证用户并设置HttpContext.Current.User(对于WebSockets,在设置中为时已晚) HttpContext.Current.User,由于不是我的自定义MessageHandler设置的,因此IRequest中的User对象是默认的空对象。

如果要编写一个IHttpModule并授权所有解析为PersistantConnection的uri,然后设置HttpContext.Current.User,则IRequest中的User对象将正确传播。

在PersistentConnection.AuthorizeRequest和PersistentConnection.OnConnected内部,您应该访问作为参数而不是静态HttpContext.Current.User属性传入的IRequest对象的User属性。 这应该适用于所有运输工具。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM