我一直试图在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
这是一种正确的方法,您是否看到任何安全漏洞?
答案 0 :(得分:2)
您有效地在服务器上存储会话状态,这是您不应该在RESTful API上执行的操作。
RESTful API上的身份验证应该遵循底层协议的标准化身份验证方法。您应该只需要客户端使用Authorization
标头在每个请求上通过HTTP Basic Auth进行身份验证,而不是重新发明HTTP身份验证。显然,所有客户端 - 服务器交互都应该通过SSL完成。
如果您确实需要一些具有过期日期的身份验证令牌,那么一旦客户端使用基本身份验证(如签名时间戳),您就可以拥有一个提供该资源的资源,但客户端仍应在Authorization
标头中发送该资源,使用自定义域,服务器上不应存储任何状态。