REST API身份验证 - 这是否足够?

时间:2013-11-10 15:17:52

标签: api rest authentication

我一直试图在REST API上围绕身份验证。

我试图想出一种成功验证用户身份的方法,记住用户可以访问客户端上的所有数据,我想出了这个想法。

Client sends username and password to the server
Server checks if they match a user.
    If it does, we create a hashed string with user_id+e-mail+currentTime+salt
    and stores this in a database-table with an expiration date.
Server returns hashed string to client

Client sends random request to server including key
Server checks if key is correct and if it's expired

这是一种正确的方法,您是否看到任何安全漏洞?

1 个答案:

答案 0 :(得分:2)

您有效地在服务器上存储会话状态,这是您不应该在RESTful API上执行的操作。

RESTful API上的身份验证应该遵循底层协议的标准化身份验证方法。您应该只需要客户端使用Authorization标头在每个请求上通过HTTP Basic Auth进行身份验证,而不是重新发明HTTP身份验证。显然,所有客户端 - 服务器交互都应该通过SSL完成。

如果您确实需要一些具有过期日期的身份验证令牌,那么一旦客户端使用基本身份验证(如签名时间戳),您就可以拥有一个提供该资源的资源,但客户端仍应在Authorization标头中发送该资源,使用自定义域,服务器上不应存储任何状态。