首页 文章

从信号器js客户端到集线器功能传递连接令牌是安全的或笨拙的

提问于
浏览
5

我读了这篇文章http://www.asp.net/signalr/overview/security/introduction-to-security#connectiontoken

JS客户端

$.connection.hub.qs = { "token" : tokenValue };
$.connection.hub.start().done(function() { /* ... */ });

.NET客户端

var connection = new HubConnection("http://foo/",
                                   new Dictionary<string, string>
                                   {
                                       { "token", tokenValue }
                                   });

在Hub中,您可以通过Context访问社区名称:

Context.QueryString["token"]

在.NET客户端上设置标头

var connection = new HubConnection("http://foo/");
connection.Headers.Add("token", tokenValue);

我注意到我们可以将一些令牌值从客户端传递给hub函数作为查询字符串.....如果我传递任何东西,因为查询字符串不安全 . 所以告诉我以安全的方式从客户端到集线器功能传递令牌值的最佳方法,因此没有人可以破解/更改或重用该令牌值 .

一个人说 SignalR uses encryption and a digital signature to protect the connection token. . 所以请告诉我,信号器首先加密令牌值然后从客户端传递到集线器是真的吗?

建议我如何以安全的方式将令牌值传递给集线器 . 谢谢

2 回答

  • 0

    您可以在javascript客户端中使用标头,例如:

    $.signalR.ajaxDefaults.headers = { Authorization: "Bearer " + yourToken };
    

    现在不是hacky,是一个全球设置,你可以在启动或成功的auth响应一次!请享用!

    现在,只有我能找到一种方法来基于每个请求覆盖它,这样我才能得到一个用户模拟沙箱,为我的用户提供管理角色...

  • 11

    当客户端启动连接时,服务器会创建并加密连接令牌并将其发送到客户端 . 从这一点开始,客户端必须在每次向服务器发送请求时发送连接令牌 . 服务器在收到请求时验证连接令牌 . 如果您问如何防止多个客户端使用相同的令牌,那么我认为您需要查看身份验证 .

相关问题