我试图授权用户在SignalR中使用某些连接,我的问题是使用WebSockets作为传输我无法设置HttpContext.Current.User而不会出现异常。授权对象也需要可以从控制器访问 此外,身份验证在整个web-api部分中都是自定义的,具有IFilter实现。
在升级到支持websockets的2012服务器之前,我必须在这里遗漏一些东西 我们只是使用HttpContext.Current.User,一切正常,看看替代品 通过SignalR,[AuthorizeAttribute]有一个实现,但仅适用于Hubs(并且我不确定更改HttpContext.Current.User在使用websockets时也不会抛出异常)。
提前致谢, 图腾。
答案 0 :(得分:1)
事实证明我在管道中做得太迟了,而不是在OnConnected或OnAuthorizeRequest时检查标头,以便验证用户并设置HttpContext.Current.User,如果是WebSockets,则为时已晚设置HttpContext.Current.User,因为它不是由我的自定义MessageHandler设置的,所以IRequest中的User对象是默认的空对象。
必须编写IHttpModule并授权解析为PersistantConnection的所有uri,然后设置HttpContext.Current.User,然后正确传播IRequest中的User对象。
答案 1 :(得分:0)
在PersistentConnection.AuthorizeRequest和PersistentConnection.OnConnected内部,您应该访问作为参数而不是静态HttpContext.Current.User属性传入的IRequest对象的User属性。这适用于所有运输工具。