2016-09-22 55 views
1

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

我以remoteHost : remotePort组合开始,但很快就明白了,每个连接都会重新处理端口号。

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

[附注=无缓存,缓存控制=无缓存,主机= somhost.com:8822,升级=的WebSocket,连接=升级,仲WebSocket的密钥= scnlM7hzjjy3cklJhJciA ==,仲的WebSocket的扩展= X-WebKit的放气帧,缩小画面,仲的WebSocket-版本= 13]

什么其他的选择,以确定客户?

+0

根据您的要求,您可以使用API​​密钥。 –

+0

API密钥?你什么意思? – injecteer

+0

您可以为每个客户创建一个API密钥。访问您的应用程序时,他们必须在请求中发送此密钥。 –

回答

0

你可以使用一个API key,那就是,一个唯一的标识符,客户端与每个请求一起发送以确定自己。根据您所使用的身份验证方法,你可以考虑标准的HTTP标头Authorization发送该值:

Authorization: API-Key <value goes here> 

或者为此创建一个自定义HTTP标头。但要小心使用自定义标头:代理可能会将它们除去。

0

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

在随后的用户重新登录过程中,我们可以依靠此cookie将cookies发送到服务器。

+0

什么是cookie的价值? – injecteer

+0

我相信'注册HTTP客户端'指的是主机,如果我们可以使用IP地址作为cookie值。 –

+0

你读过原始问题了吗? – injecteer

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"; 
+0

我不使用php – injecteer

+0

'bgcolor' ?!这是严重的吗? –

0

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

客户端ID证书可以工作,这取决于本地机器的管理方式。如果他们从某个地方访问过您的应用程序,那么他们已经通过身份验证,那么在解决方案上设置单一标志可能会有效。提示进行身份验证总是可行。