尝试将 signalR 实现到我们的项目中。
目前,有一个无需身份验证的工作版本,服务器和客户端通过 websockets 成功通信。
到目前为止一切都很好!
下一步是添加用户登录 ID 以匹配连接 ID,这是我无法弄清楚的。
用户登录站点,进入经过身份验证的页面,并将 HttpContext.User 设置为我们的 iprinciple 版本,其中包含特定于该用户的各种数据位。
这可用于页面发布和 ajax 调用的普通 MVC Controller ,但不可用于 Hub Controller (我的调用信号器方法的名称)。
使用这样的东西:
protected object GetAuthInfo()
{
var user = Context.User;
return new
{
UserName = user.Identity.Name
};
}
但是,这个Context.User.Identity为null,并且Context.User没有被授权。在我看来,websocket 位于不同的 session 上,并且不知道初始页面加载 session ,因此尚未设置用户身份。
最佳答案
您是否还需要在应用程序启动时通过调用 RequireAuthentication 方法对应用程序中的所有集线器和集线器方法进行身份验证?
public partial class Startup {
public void Configuration(IAppBuilder app) {
app.MapSignalR();
GlobalHost.HubPipeline.RequireAuthentication();
}
}
(摘自http://www.asp.net/signalr/overview/security/hub-authorization)
希望这有帮助 新年快乐 ! 此致 史蒂芬
关于asp.net-mvc - 将 MVC 身份验证与 SignalR v2.x 结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34547240/