我刚刚读了这篇已有几年历史的文章,但是描述了一种保护REST API的聪明方法。实质上:
- 每个客户都有唯一的公钥/私钥对
- 只有客户端和服务器才知道私钥。它永远不会通过电线发送
- 对于每个请求,客户端都会获取多个输入(整个请求本身,当前时间戳和私钥),并通过HMAC函数运行它们以生成请求的哈希
- 然后,客户端将常规请求(包含公钥)和哈希发送到服务器
- 服务器会查询客户端的私钥(基于提供的公钥),并进行一些时间戳检查(我当然不理解),以验证请求是否不是受害对象。 重播攻击
- 如果一切正常,则服务器使用私钥和相同的HMAC函数来生成其自己的请求哈希
- 然后,服务器比较两个哈希(客户端发送的哈希值以及它生成的哈希值);如果它们匹配,则对请求进行身份验证并允许其继续
然后我偶然发现了JWT,听起来很相似。但是第一篇文章根本没有提到JWT,因此我想知道JWT是否与上述auth解决方案不同,如果有所不同,怎么做。
1
大声笑...我只是想问同样的问题,遇到了你的问题。我发现的关于无状态身份验证的第一件事来自AWS:docs.aws.amazon.com/AmazonSimpleDB/latest/DeveloperGuide/…,并实现了诸如massimilianosciacco.com/…之类的东西。然后我发现了JWS / JWT,它在某种程度上是相似的。但是据我了解,JWT是一种标准,而上述其他解决方案是一些自定义实现(未标准化)。如果我错了,有人纠正我。
—
nyxz 2015年
很高兴知道,我不是唯一担心这些细节的人!JWT当然感觉很相似,而且好处是它是标准化的。我只是想知道这种自定义HMAC解决方案的公平性(在安全方面)。
—
smeeb