为了账号安全,请及时绑定邮箱和手机立即绑定

REST身份验证并公开API密钥

REST身份验证并公开API密钥

www说 2019-11-22 15:00:41
我一直在阅读REST,因此有很多关于REST的问题,以及许多其他网站和博客。尽管我从未见过这个特定问题的答案...由于某种原因,我无法将这个想法笼罩在心...如果我正在构建RESTful API,并且想要保护它的安全,那么我所看到的方法之一就是使用安全令牌。当我使用其他API时,会有一个令牌和一个共享的秘密……很有意义。我不明白的是,正在通过javascript(XHR / Ajax)发出对REST服务操作的请求,这是为了防止某人通过诸如FireBug(或浏览器中的“查看源代码”)之类的简单内容来嗅探到这一点,以及复制API密钥,然后假冒使用密钥和秘密的那个人?
查看完整描述

3 回答

?
守候你守候我

TA贡献1802条经验 获得超10个赞

api secret没有显式传递,secret用于生成当前请求的标志,在服务器端,服务器按照相同的过程生成标志,如果两个标志匹配,则请求成功通过身份验证-因此仅签名是通过请求传递的,而不是秘密。


查看完整回答
反对 回复 2019-11-22
?
开满天机

TA贡献1786条经验 获得超13个赞

这个问题的答案是可以接受的,但为了澄清起见,共享秘密身份验证的工作方式如下:

  1. 客户端具有公共密钥,可以与任何人共享,没关系,因此您可以将其嵌入javascript。这用于标识服务器上的用户。

  2. 服务器具有密钥,此密钥必须受到保护。因此,共享密钥身份验证要求您可以保护您的秘密密钥。因此,无法直接连接到其他服务的公共javascript客户端,因为您需要服务器中间人来保护机密。

  3. 服务器使用某种算法来签署请求,该算法包括秘密密钥(秘密密钥有点像盐),最好是时间戳,然后将请求发送到服务。时间戳是为了防止“重播”攻击。请求的签名仅在n秒左右有效。您可以通过获取时间戳头来检查服务器上的内容,该头应包含签名中包含的时间戳值。如果该时间戳记过期,则请求失败。

  4. 该服务获取的请求不仅包含签名,而且还包含以纯文本签名的所有字段。

  5. 然后,该服务使用共享密钥以相同的方式对请求进行签名,并比较签名。


查看完整回答
反对 回复 2019-11-22
  • 3 回答
  • 0 关注
  • 584 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信