所以我想要制作一个令牌化的登录系统,但是想要了解一些细节。请不要告诉我使用OAuth等,因为这不是我想要实现的目标。我想了解它们如何工作的最佳方式。
所以这是我对如何看待系统工作的基本理解:
用户在其手机应用程序上注册,该应用程序通过HTTPS将用户名和密码发送到服务器。然后,服务器生成两个令牌,一个公共令牌和一个私有令牌,它们都返回给客户端。
然后,客户端使用localstorage在本地存储这两个令牌。
因此,对于需要身份验证的后续页面请求,客户端会将公共令牌和私有令牌的哈希版本发送到服务器。
服务器检查数据库中的公共令牌,取消发送到服务器的哈希值,使用timestamp之类的内容进行比较。如果两者都匹配,则对用户进行身份验证。
现在这很好,我理解从理论上说这应该是非常安全的,因为私有令牌只通过HTTPS传输一次,因此有人抓住它并作为用户进行身份验证的机会是最小的。
现在我真正关注安全性的问题......如果有人仅攻击您的数据库(假设数据库与服务器端代码不在同一台服务器上),如何保护用户身份验证。如果我要登录并获取数据库,那么我将拥有用户名,加密密码,公共和私人令牌。从技术上讲,我可以使用这两个令牌来验证自己作为用户。有什么方法可以避免这种情况?
希望有意义!
更新
好的,这个过程也足够安全:
密码使用bcrypt并存储在数据库中
用户登录并输入用户名和密码
以上所有内容都将通过HTTPS。
这足够安全吗?解决了将令牌存储在服务器上的问题,因为它只存储在客户端系统上,如果要泄露,密码也会在数据库中进行哈希处理。