我一直在阅读REST,因此有很多关于REST的问题,以及许多其他网站和博客。尽管我从未见过这个特定问题的答案...由于某种原因,我无法将这个想法笼罩在心...如果我正在构建RESTful API,并且想要保护它的安全,那么我所看到的方法之一就是使用安全令牌。当我使用其他API时,会有一个令牌和一个共享的秘密……很有意义。我不明白的是,正在通过javascript(XHR / Ajax)发出对REST服务操作的请求,这是为了防止某人通过诸如FireBug(或浏览器中的“查看源代码”)之类的简单内容来嗅探到这一点,以及复制API密钥,然后假冒使用密钥和秘密的那个人?
3 回答
守候你守候我
TA贡献1802条经验 获得超10个赞
api secret没有显式传递,secret用于生成当前请求的标志,在服务器端,服务器按照相同的过程生成标志,如果两个标志匹配,则请求成功通过身份验证-因此仅签名是通过请求传递的,而不是秘密。
开满天机
TA贡献1786条经验 获得超13个赞
这个问题的答案是可以接受的,但为了澄清起见,共享秘密身份验证的工作方式如下:
客户端具有公共密钥,可以与任何人共享,没关系,因此您可以将其嵌入javascript。这用于标识服务器上的用户。
服务器具有密钥,此密钥必须受到保护。因此,共享密钥身份验证要求您可以保护您的秘密密钥。因此,无法直接连接到其他服务的公共javascript客户端,因为您需要服务器中间人来保护机密。
服务器使用某种算法来签署请求,该算法包括秘密密钥(秘密密钥有点像盐),最好是时间戳,然后将请求发送到服务。时间戳是为了防止“重播”攻击。请求的签名仅在n秒左右有效。您可以通过获取时间戳头来检查服务器上的内容,该头应包含签名中包含的时间戳值。如果该时间戳记过期,则请求失败。
该服务获取的请求不仅包含签名,而且还包含以纯文本签名的所有字段。
然后,该服务使用共享密钥以相同的方式对请求进行签名,并比较签名。
- 3 回答
- 0 关注
- 584 浏览
相关问题推荐
添加回答
举报
0/150
提交
取消