我正在寻找关于HTTP请求的身份验证和签名(完整性检查)的最佳实践的一些指导/意见。我对使用的语言和技术保持相当开放,但基本参数和要求如下:
我们考虑过的事情:
如果某个管理员决定将此标记为重复,那么我认为其他Q不能完全解决此问题的全部范围:
答案 0 :(得分:4)
假设客户端和服务器之间存在1-1关系,带计数器的HMAC可以解决这个问题。
客户端和服务器具有共享密钥128位密钥。
客户端发送具有带密钥的HMAC和计数器的消息。建议使用SHA-256,因为SHA-1即将推出(SHA-1 HMAC仍然被认为是安全的,但这是另一个故事)。
e.g。
example.com?message=foo&counter=1&hmac=35ed8c76e7b931b06f00143b70307e90f0831682e7bdce2074ebb5c509d16cfb`
(This tool用于此帖子的秘密bar
。)
HMAC的计算结果为message=foo&counter=1
。
现在,一旦HMAC经过服务器验证并且计数器被检查,服务器的计数器就会增加到2.现在服务器不会接受计数器小于2的任何经过验证的消息。
可以使用JSON Web Tokens,以便您以标准格式执行上述操作。您可以使用多个客户端执行上述操作,但是您需要跟踪每个客户端的计数器服务器端,并且客户端必须在消息中标识自己。如果您决定每个客户端使用不同的密钥,那么管理共享密钥是最棘手的。