2017-09-04 35 views
0

我正在开发一个aws云上的聊天后端应用程序。为了为聊天后端制作可扩展的体系结构,我必须确保打开连接的人是真正的人。如何防止我的应用程序通过代理发送数据?

更准确的说聊天ofcourse必须保持tcp连接与服务器开放所有的时间和我有以下问题:

1 - 后端有一个负载平衡器elastic load balancer

2 - tcp客户端应用程序和后端服务器之间的连接必须保持打开状态并保持活动状态。这意味着应用程序必须保持与服务器的连接而不是负载平衡器的连接。

3 - elb负载均衡器必须通过会话表sticky session将连接和负载发送到与之前连接的应用相同的服务器。 不幸的是,负载平衡器只支持l4l7层,我想我需要使用l3层。

这里的主要问题是大多数人在代理服务器后面操作,所以我不能保持与他们的连接,因为tcp连接将与代理而不是他们的应用程序。

我不知道如何解决这个问题,但我现在知道的唯一解决方案是: 我必须防止用户在任何代理服务器后面运行,以确保tcp连接与他们不是代理直接相连我要这样做吗?

如果有办法让它们在代理之后运行,并且可以在后端解决问题,请告诉我。

回答

2

我不确定我是否理解您的问题。如果你使用的是网络套接字,大多数代理服务器都会允许这种类型的通信,但是如果它们有超时等,它们也可能会给你带来麻烦。

您无法控制某人是否在代理人后面。在很多情况下,代理将完全透明,所以如果不检查所有网络跳数,您将无法知道它在那里。您可能需要进一步阅读。良好的开端是这样的文章 -

https://www.infoq.com/articles/Web-Sockets-Proxy-Servers

如果你正在尝试使用的IP地址作为身份验证机制,我建议,而不是使用标准的认证机制。一旦通过身份验证,您应该使用会话cookie,JWT或其他标准会话管理解决方案来管理会话。请注意,JWT通常是无状态的(不使用会话),但可用于授权用户使用会话类型数据。

+0

好吧然后我可以做一个聊天应用程序,必须打开tcp连接ith服务器? –

+1

代理服务器将进行连接,而不是真正的应用程序 –

+0

该应用程序将使连接仍然存在。这只是通过代理服务器路由完成的。 – BryceH

相关问题