识别路由器/防火墙后面的客户端

时间:2016-09-22 14:02:57

标签: java http

在我的网络应用程序中,我需要注册从路由器后面的本地网络访问的http客户端。

我从remoteHost : remotePort组合开始,但很快就清楚了,端口数字在每次连接时都会重新生成。

我需要能够识别类似于MAC地址的客户端,一些不会改变的属性。我想使用headers[ "X-Forwarded-For" ],但它根本不存在:

  

[Pragma = no-cache,Cache-Control = no-cache,Host = somhost.com:8822,Upgrade = websocket,Connection = Upgrade,Sec-WebSocket-Key = scnlM7hzjjy3cklJhJciA ==,Sec-WebSocket-Extensions = x-webkit-deflate-frame,deflate-frame,Sec-WebSocket-Version = 13]

识别客户的其他选择是什么?

4 个答案:

答案 0 :(得分:0)

一种选择是使用cookie。当客户端第一次访问webapp时,我们可以在客户端设置一个有很长的到期日期的cookie。

在随后的用户重新登录期间,我们可以依赖此cookie,因为cookie会被发送到服务器。

答案 1 :(得分:0)

您可以尝试使用这一部分PHP来查看服务器对传入的http请求的了解:

$keys = array_keys($_SERVER);
echo "<table bgcolor='black' cellpadding='1' cellspacing='1'>\n";
echo "  <tr bgcolor='yellow'><td><b>Key</b></td><td><b>Value</b></td></tr>\n";
foreach ($keys as $key) {
   echo "  <tr bgcolor='white'><td>" . $key . "</td><td>" . $_SERVER[$key] . "</td></tr>\n";
}
echo "</table>\n";

答案 2 :(得分:0)

您可以使用API key,即客户端发送的唯一标识符以及每个请求以标识自己。根据您使用的身份验证方法,您可以考虑使用标准HTTP Authorization标头来发送此值:

Authorization: API-Key <value goes here>

或者为此目的创建自定义HTTP标头。但是要小心自定义标题:代理可能会删除它们。

答案 3 :(得分:0)

您是在识别键盘上的用户还是发出请求的设备?您是否需要跟踪这些长期或仅在使用期间?您的用户是否从多个设备连接?

客户端ID证书可以工作,具体取决于本地计算机的管理方式。如果他们从某个已经过身份验证的位置访问您的应用,那么在解决方案上设置单点登录即可。提示身份验证也始终有效。