使用XSockets的WebRTC安全选项

时间:2014-05-30 00:26:43

标签: asp.net-mvc-5 webrtc xsockets.net

如果我按照此页面上列出的示例“http://xsockets.net/docs/installing-xsocketsnet”并将控制器作为自托管应用程序安装在与托管与XSocket控制器通信的网站的Web服务器不同的服务器上,我该怎么办?确保只有我网站上经过身份验证的用户才能访问XSocket控制器。

我是XSockets架构的新手,这令我感到困惑。在JavaScript中调用这行代码peerBroker = new XSockets.WebSocket("ws://127.0.0.1:4502/CustomBroker");时,似乎需要将一些登录凭据传递给Controller。我没有找到任何文档概述如何安全地将此信息提供给Controller。作为背景,网站方面正在运行MVC5。

混淆的主要问题是代理与不同的服务器作为将访问代理的mvc5应用程序。我试图确保代理只允许当前登录系统的用户访问代理。

1 个答案:

答案 0 :(得分:0)

在服务器之间共享auth票证实际上并不那么难。

  1. 确保在两个配置中都有相同的机器密钥。

    //Machine key in web
    <machineKey compatibilityMode="Framework45" validationKey="validation-key-here" decryptionKey="decryption-key-here" validation="SHA1" decryption="AES" />
    
    //Machine key in app-server
    <machineKey compatibilityMode="Framework45" validationKey="same-as-on-webserver" decryptionKey="same-as-on-webserver" validation="SHA1" decryption="AES" />
    
    //Do note that compabilityMode will be different between 4.5 and other .NET versions see [MSDN][1]
    
  2. 当您使用forms-auth登录时,您将获得一个类似

    的cookie
    .ASPXAUTH=DFE811295BABA98CFE94040...
    
  3. 要在XSockets.NET中获取该cookie,请执行以下操作

    public class MyController : XSocketController
    {
        public MyController()
        {            
            this.OnOpen += MyController_OnClientConnect;
        }
    
        void MyController_OnClientConnect(object sender, XSockets.Core.Common.Socket.Event.Arguments.OnClientConnectArgs e)
        {
            var ticket = GetFormsAuthenticationTicket();
            //Validate ticket & maybe extract user info as shown below...
            //If not valid just call this.Close();
        }
    }
    
  4. 这不是必须的,但正如您所见,您可以传递自定义客户端信息。我这样做是通过使用自定义的原则

    public class CustomPrincipal
    {
        public Guid Id { get; set; }
        public string Email { get; set; }
        public string[] Roles { get; set; }
    }
    
  5. 在这种情况下,您可以使用

    从故障单中提取用户信息
    var userinfo = this.JsonSerializer.DeserializeFromString<CustomPrincipal>(ticket.UserData);
    
  6. 注意:阅读http://xsockets.net/docs/security,您将看到您还可以使用Authorize属性并使用OnAuthorization方法(覆盖)

    编辑:为了能够访问xsockets服务器上的cookie,您必须连接到设置cookie的同一源。例如:如果连接到localhost(web),则必须使用ws:// localhost:port才能访问cookie。