在HEADER或URL中传递API密钥?

rya*_*zec 5 security rest http

我注意到某些API让您将API密钥作为url参数传递,而其他API则将其传递给HTTP HEADER.我正在开发一个基于Web的应用程序,它将严重依赖REST API,而现在我只是拥有它,因此API KEY作为url参数传递.

我的问题是这些选项中的一个是否比另一个更安全?

Sri*_*nan 6

在这两种情况下,API密钥都将以未加密的方式传递.所以除非你使用HTTPS,否则两者都是不安全的.

在实践中,HTTP标头变得更安全一点,因为 -

  1. 该网址存储在浏览器历史记录中
  2. url存储在服务器端的访问日志中

旁白:除非您要求用户使用其凭据登录,否则无法保护Web上的REST API.任何人都可以轻松识别API密钥并向服务器发出请求.

编辑:回应@ segfault的评论 -

网站用户通常不输入API密钥.他们输入用户名和密码,并通过交易获取API密钥或访问令牌,因为它通常被调用.

如果您强制用户输入API密钥而不是用户名和密码,那么它就是安全的.但正如我所说,我没有看到任何严肃的应用程序这样做.

更具体地说,我的意思是"如果后端API需要API密钥,并且您正在从浏览器进行AJAX调用,并且您没有要求用户提供某种凭据,那么您就不安全了"

  • Sri,即使你的更新和修改也有很多问题。您还没有见过任何严肃的应用程序接受 api 密钥而不是密码吗?所有严肃的应用程序都会这样做。例如,亚马逊网络服务。使用用户名/密码代替 API 密钥进行身份验证并没有什么神奇的“更安全”,最终它们都是对授权用户保密的字符串。 (2认同)