我应该在REST api调用中将API密钥放在哪里?

Jam*_*111 5 api rest

有三种选择:

  1. 网址
  2. 身体

我没有做太多的工作,authentication但我正在构建一个API需要它的东西.我以前做的是parseapi key (e.g sha-256) 的身体post要求.

但我刚刚意识到你不能用GET请求做到这一点,对吧?所以我需要找到最安全的方式来验证每个API请求.

我在想,传递users authenticationkey(用户数据库表中的存储)以及每个请求的oAuth密钥会更安全吗?这样任何黑客都需要两个密钥才能进入系统?

有没有人知道最好的方法是什么?有没有好的tutorials在线可以告诉我如何解析标题中的值?

例:

要对router每个请求进行身份验证,我是否会检查每个请求api key

有点像:

app.all('/api/v1/*', [require('./middlewares/validateRequestAPIKEY')]); 
Run Code Online (Sandbox Code Playgroud)

Har*_*ara 2

我为移动应用程序设计了一些 API,以下是我为客户实现的:

The Keys will be passed in header
Run Code Online (Sandbox Code Playgroud)

在服务器端,我将检查每个 API 调用上的密钥以进行验证,在某些 API 中,您可能需要跳过验证(登录就是一个示例)

这是我的实现

1) 不需要令牌/密钥过期:

  • 用户注册进入系统
  • 服务器将生成一个唯一的密钥供用户存储到系统中(您可以将公钥提供给客户端进行加密,并将私钥存储在服务器中进行解密)
  • 客户端将在每个后续请求中发送此密钥(您可以使用其他算法加密该密钥,该算法可以在服务器上解密以提高安全性)

2)当token需要过期时:

  • 创建一个在有限时间内生成密钥的API,客户端将调用此API来获取密钥,该API将检查客户端是否是有效用户并返回特定时间段内的密钥。
  • 在下一个 API 请求中,客户端将在标头中发送密钥,服务器将检查令牌/密钥是否有效/过期,如果有效则执行操作,否则将响应发送给客户端以再次生成密钥。
  • 您可以再次使用其他算法加密密钥以提高安全性。

希望有帮助