使用websockets传输的signalpersistentconnection自定义授权

本文关键字:自定义 授权 signalpersistentconnection websockets 传输 使用 | 更新日期: 2023-09-27 18:18:13

我试图授权用户在SignalR中的一些连接,我的问题是使用WebSockets作为传输,我不能设置HttpContext.Current.User而不会得到异常。授权对象还需要可以从控制器和在整个web-api部分,也可以使用filter实现自定义身份验证。

在我们升级到支持websockets的2012服务器之前,我一定错过了一些东西我们简单地使用了HttpContext.Current.User,一切都工作得很好通过SignalR,有一个[AuthorizeAttribute]的实现,但只适用于Hubs(我不确定改变HttpContext.Current.User在使用websockets时不会抛出异常)。

提前感谢,图腾。

使用websockets传输的signalpersistentconnection自定义授权

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

必须编写一个IHttpModule并授权所有解析为PersistantConnection的uri,然后设置HttpContext.Current。用户,则IRequest中的User对象被正确传播。

PersistentConnection的内部。authorizerrequest和PersistentConnection。在连接时,你应该访问作为参数传入的IRequest对象的User属性,而不是静态的HttpContext.Current.User属性。