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

时间:2015-01-16 09:09:06

标签: asp.net signalr

我读了这篇文章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.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 :(得分:11)

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

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

现在不是hacky,并且是一个全局设置,你可以在启动或成功的auth响应时做一次!享受!

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

答案 1 :(得分:0)

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