1

我正在使用 PHP 5.4 构建一个 REST api,并且我正在放入我自己的自定义身份验证库。我正在密切关注 2-legged OAUTH 使用的格式。(参考:http ://www.thebuzzmedia.com/designing-a-secure-rest-api-without-oauth-authentication/ )

按照这个规范,我有几条需要随每个请求一起发送的元数据,以便我可以安全地对用户进行身份验证。

  1. AppId -> 这是为了验证谁在发送请求。还要知道使用哪个密钥来生成 HMAC 校验和服务器端。
  2. Timestamp -> 这是处理重放攻击的。
  3. 校验和 -> 这是一个 HMAC 哈希,以确保请求未被篡改。
  4. AccessToken -> 将在初始身份验证后与每个请求一起使用。

我只是想知道发送所有这些元数据的最佳做法是什么?

我正在考虑创建自定义标题并将这些东西发送到那里。这样我可以将这些数据与函数所需的实际参数分开,但我不确定这是最佳实践。

例如:MY-API-APP-ID:243242,MY-API-TIMESTAMP:123123123 等...

或者

所有这些东西都应该作为每个请求的参数传递吗?

GET 方法呢,它们应该放在查询字符串中吗?(?timestamp=12312312&appId=123123...)

谢谢!

4

1 回答 1

1

实际上,不久前我确实做过类似的事情。我将自己的 API 身份验证器编写为 Codeigniter 库,然后自动加载它,以便它检查每个通过的页面请求。

我决定根据每个请求在自定义标头中发送所有内容:

Auth-Token
Auth-Device
Auth-Timestamp
Auth-Hash

我不建议仅在 GET 参数中执行这些操作,因为它使处理 URL 变得更加麻烦,并且在那时它有点不再是 RESTful。

也就是说,我相信有些人会指出您不应该创建自定义请求标头,并且说实话,我确信您应该在身份验证解决方案中使用标头的标准做法。但是应用程序和 API 运行良好,所以我对我的“嗯,它有效”的解决方案很满意。

但也请注意,我们使用 SSL 加密标头并防止任何形式的嗅探或中间人攻击。

于 2013-07-20T06:01:16.277 回答