标记登录系统 - 正确的方式?

时间:2015-06-17 18:02:05

标签: security authentication oauth token tokenize

所以我想要制作一个令牌化的登录系统,但是想要了解一些细节。请不要告诉我使用OAuth等,因为这不是我想要实现的目标。我想了解它们如何工作的最佳方式。

所以这是我对如何看待系统工作的基本理解:

用户在其手机应用程序上注册,该应用程序通过HTTPS将用户名和密码发送到服务器。然后,服务器生成两个令牌,一个公共令牌和一个私有令牌,它们都返回给客户端。

然后,客户端使用localstorage在本地存储这两个令牌。

因此,对于需要身份验证的后续页面请求,客户端会将公共令牌和私有令牌的哈希版本发送到服务器。

服务器检查数据库中的公共令牌,取消发送到服务器的哈希值,使用timestamp之类的内容进行比较。如果两者都匹配,则对用户进行身份验证。

现在这很好,我理解从理论上说这应该是非常安全的,因为私有令牌只通过HTTPS传输一次,因此有人抓住它并作为用户进行身份验证的机会是最小的。

现在我真正关注安全性的问题......如果有人仅攻击您的数据库(假设数据库与服务器端代码不在同一台服务器上),如何保护用户身份验证。如果我要登录并获取数据库,那么我将拥有用户名,加密密码,公共和私人令牌。从技术上讲,我可以使用这两个令牌来验证自己作为用户。有什么方法可以避免这种情况?

希望有意义!

更新

好的,这个过程也足够安全:

  • 用户通过HTTPS发送用户名和密码进行注册。
  • 密码使用bcrypt并存储在数据库中

  • 用户登录并输入用户名和密码

  • 通过bcrypt检查密码与数据库中存储的密码
  • 如果匹配,则使用密钥生成JWT并将其发送回客户端
  • 包含此令牌的所有未来身份验证都将根据密钥进行验证,如果匹配,则会对用户进行身份验证。

以上所有内容都将通过HTTPS。

这足够安全吗?解决了将令牌存储在服务器上的问题,因为它只存储在客户端系统上,如果要泄露,密码也会在数据库中进行哈希处理。

0 个答案:

没有答案