4

我一直在尝试围绕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

这是一种正确的方法吗?您是否发现任何安全漏洞?

4

1 回答 1

2

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

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

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

于 2013-11-10T15:26:23.663 回答