1

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

我必须在这里遗漏一些东西,在我们升级到支持 websockets 的 2012 服务器之前,我们只使用了 HttpContext.Current.User 并且一切正常,通过 SignalR 查看替代方案,[AuthorizeAttribute] 有一个实现,但仅适用于集线器(和我不确定在使用 websockets 时更改 HttpContext.Current.User 也不会引发异常)。

在此先感谢,图腾。

4

2 回答 2

1

事实证明,我在管道中做得太晚了,而不是在 OnConnected 或 OnAuthorizeRequest 时检查标头以验证用户并设置 HttpContext.Current.User,如果是 WebSockets,则设置太晚了HttpContext.Current.User,并且由于它不是由我的自定义 MessageHandler 设置的,所以 IRequest 中的 User 对象是默认的空对象。

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

于 2013-06-16T18:34:58.517 回答
0

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

于 2013-06-14T18:30:06.290 回答