基于令牌的PHP身份验证

时间:2015-10-29 13:36:52

标签: php api security hash hmac

我正在尝试使用私有& amp;来实现API的身份验证公钥。

我想要做的是提供一个私钥,用它散列一些数据并在标题中发送散列,然后在服务器上再次重新发送相同的数据进行比较。

我遇到的问题是,我应该散列什么样的数据,请求URI,内容类型以及内容本身,但是当请求是GET且没有内容时会是什么。

使用私钥散列任何数据是否足够安全,或者我是否需要做一些特别的事情?

1 个答案:

答案 0 :(得分:2)

  1. 如评论中所述,您不需要此处的公钥/私钥对。你想要的是身份证明。客户端会给你他们的用户名/ ID(他们会声称一个身份),你还需要额外的证明,确实是他们。为此目的,他们发送一个只有他们应该知道的秘密。这是一个简单的标记。

  2. 您希望避免来回传输此令牌。记住它是秘密并且应尽可能保密。相反,你要求客户发送的是间接证明;你要求他们签署请求。

  3. 签署请求意味着他们只是hash the contents of the request with a MAC algorithm,他们的秘密令牌是哈希的关键。

    • 哈希请求的哪些部分决定;哈希中包含的所有内容都是第三方无法使用的,但是您应该避免要求所有进行哈希处理,因为可以在请求的各个阶段添加或删除HTTP头。
    • 为避免重播攻击,请对请求的日期进行哈希处理(并要求将日期与请求一起发送)。不接受超过特定到期日的请求。或者包括一个不断变化的令牌,如果可行的话。
    • 确保散列很容易重现,例如要求对要散列的数据进行排序。
    • 您应该在哈希中包含URL;如果你这样做,是否有身体数据并不重要。从上面的URL +日期/令牌已足以形成MAC。