php REST API auth元数据的良好实践

时间:2013-07-20 05:50:07

标签: php api rest

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

遵循此规范,我需要与每个请求一起发送几个元数据,以便我可以安全地对用户进行身份验证。

  1. AppId - >这是为了验证谁正在发送请求。还要知道用于生成HMAC校验和服务器端的密钥。
  2. 时间戳 - >这是为了处理重播攻击。
  3. 校验和 - >这是一个HMAC哈希,以确保请求没有被篡改。
  4. AccessToken - >将在初始身份验证后与每个请求一起使用。
  5. 我只是想知道发送所有这些元数据的最佳做法是什么?

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

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

    或者

    所有这些事情都应该作为参数传递给每个请求吗?

    GET方法怎么样,它们只是放在查询字符串中? (?时间戳= 12312312&安培; APPID = 123123 ...)

    谢谢!

1 个答案:

答案 0 :(得分:1)

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

我决定在每次请求时发送自定义标题中的所有内容:

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

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

那就是说,我确信有些人会指出你不应该创建自定义请求标头,而且我确信我们应该如何在身份验证解决方案中使用标头。但是应用程序和API工作得很好,所以我很满意我的“呃,它的工作”解决方案。

但是请注意,我们使用SSL加密了标题并阻止了任何类型的嗅探或中间人攻击。