我正在做一年前做的一个项目,我实际上忘记了我当时的想法。
我的服务器和客户的服务器之间通过 HTTP POST 进行通信。
我的服务器发送一个列表,告诉客户的服务器我需要哪些数据,每个请求的数据都有一个唯一的ID,客户的服务器发回一个ID,数据对的列表。
例如:我的服务器发送
[{id: 1001, input: 40.2},
{id: 2033, input: 326.4},
{id: 4212, input: 67.12},
{id: 9551, input: 5.3}]
我的客户的服务器响应
[{id: 1001, output: 3144},
{id: 2033, output: 4362},
{id: 4212, output: 6428},
{id: 9551, output: 2319}]
我的客户的服务器可以响应空列表,然后稍后通过另一个 API 发送数据。
为了防止客户的服务器收到虚假请求,我的服务器将发送一个key
以及列表。客户可以在控制台页面中看到该密钥,并将其设置到其服务器中。
为防止我们的服务器收到虚假回复或虚假数据提交,客户需要将他们的Customer ID
和API key
与回复列表一起发送。他们可以在控制台页面中看到它。
奇怪的是,列表条目不仅有id
,而且还有一个随机生成的token
。所以列表实际上看起来像这样。
我的服务器发送
[{id: 1001, token: dgkldjktle34512fas, input: 40.2},
{id: 2033, token: gt23k4652bkjte24ks, input: 326.4},
{id: 4212, token: 35wfvjnsl34342ldsa, input: 67.12},
{id: 9551, token: eftrlh44yw3.dflk3r, input: 5.3}]
我的客户的服务器响应
[{id: 1001, token: dgkldjktle34512fas, output: 3144},
{id: 2033, token: gt23k4652bkjte24ks, output: 4362},
{id: 4212, token: 35wfvjnsl34342ldsa, output: 6428},
{id: 9551, token: eftrlh44yw3.dflk3r, output: 2319}]
如果响应数据有错误的令牌,我的服务器将不接受它。
但是现在我很困惑,为什么我需要列表中的令牌?
API key
检查已经防止了虚假响应或虚假数据提交。
是无用的冗余吗?还是有我以前想过,但现在忘记了的场景?
令牌可以防止您在没有实际请求任何内容的情况下收到响应,这与CSRF有点相似。但请注意,您可以改进发送密钥进行身份验证的方案。目前,如果我理解正确,中间攻击者(可能是代理,即使在https(tls(的情况下,这始终应该是(可以更改值,而共享密钥可用于应用消息身份验证(例如。HMAC(,以保证数据确实是向任一方向发送的数据。