Security HMAC消息格式

Security HMAC消息格式,security,api,http,authentication,hmac,Security,Api,Http,Authentication,Hmac,当使用HMAC对API调用进行身份验证时,通常要散列的消息包含许多似乎没有添加任何内容的内容。例如,以下是生成API签名的步骤: hmacsha1(HTTP动词+URI+JSON\u请求\u内容+DATETIME,“秘密”) 为什么不这样做呢 hmacsha1(JSON请求内容,“机密”) 这是假设JSON_请求_内容是包含所有相关请求信息的JSON字符串 在我看来,添加HTTP动词和URI(或任何额外的非内容特定信息)只是增加了消息的长度,我不理解其好处 谢谢 HMAC通常用于防止邮件篡改,但

当使用HMAC对API调用进行身份验证时,通常要散列的消息包含许多似乎没有添加任何内容的内容。例如,以下是生成API签名的步骤:

hmacsha1(HTTP动词+URI+JSON\u请求\u内容+DATETIME,“秘密”)

为什么不这样做呢

hmacsha1(JSON请求内容,“机密”)

这是假设JSON_请求_内容是包含所有相关请求信息的JSON字符串

在我看来,添加HTTP动词和URI(或任何额外的非内容特定信息)只是增加了消息的长度,我不理解其好处


谢谢

HMAC通常用于防止邮件篡改,但也用于防止邮件重播

如果HMAC只包含有效载荷和一个只能防止篡改的秘密,那么如果我再次发送相同的消息,它将是有效的。通过使用其他细节(尤其是datetime或nonce)来修饰请求,这些细节应该可以防止重播和篡改


要将datetime用作哈希的salt,通常需要以明文形式发送带有消息的datetime(尽管可以从在负载外部的请求头中接收或发送消息的时间粗略推断出来)。如果datetime与服务器认为的时间相差太远,则消息将失败(例如,不会在一分钟内)。如果服务器对数据执行相同的哈希,但没有得到相同的结果,则消息也会失败

要使用nonce,最实用的方法是服务说,下次您向我发送请求时,请使用此nonce。nonce不需要与请求一起以明文形式发送。当服务器成功处理一条消息时,它会说,下次使用此nonce时,前一条消息将无效


Datetime通过确保消息在特定时间发送来防止重播,nonce通过使用一次性密码来防止重播。

请解释如何比较Datetime或nonce?如果我发送了我的datetime,在它到达服务器时,它可能已经改变了。那你怎么比较呢?谢谢