Security 标记化登录系统-正确的方法?

Security 标记化登录系统-正确的方法?,security,authentication,oauth,token,tokenize,Security,Authentication,Oauth,Token,Tokenize,所以我想玩一玩标记化登录系统,但我想了解一些细节。请不要告诉我使用OAuth等,因为这不是我想要实现的。。我想了解他们工作的最佳方式 这是我对系统工作原理的基本理解: 用户在其手机应用程序上注册,该应用程序通过HTTPS将用户名和密码发送到服务器。然后,服务器生成两个令牌,一个公共令牌和一个私有令牌,这两个令牌都返回给客户端 然后,客户端使用localstorage在本地存储这两个令牌 因此,对于需要身份验证的后续页面请求,客户端将向服务器发送公共令牌和私有令牌的哈希版本 服务器检查数据库中的公

所以我想玩一玩标记化登录系统,但我想了解一些细节。请不要告诉我使用OAuth等,因为这不是我想要实现的。。我想了解他们工作的最佳方式

这是我对系统工作原理的基本理解:

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

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

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

服务器检查数据库中的公共令牌,使用类似于时间戳的内容取消对发送到服务器的哈希的清除,并对它们进行比较。如果两者都匹配,则对用户进行身份验证

好了,我知道这在理论上应该是相当安全的,因为私有令牌只通过HTTPS传输一次,所以有人获得它并作为用户进行身份验证的机会很小

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

希望这是有意义的

更新

好的,那么这个过程是否足够安全:

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

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

  • 通过bcrypt检查数据库中存储的密码
  • 如果存在匹配项,则使用密钥生成JWT并发送回客户端
  • 包含此令牌的所有未来身份验证都将根据密钥进行验证,如果它们匹配,则对用户进行身份验证
以上所有内容都将通过HTTPS实现


这足够安全吗?减少了将令牌存储在服务器上的问题,因为它只会存储在客户端系统上,而且如果泄露,密码也会在数据库中散列。

加密或只是散列令牌。@PeeHaa,然后我假设您是安全的,只要您的服务器代码不被泄露,这将显示您使用的散列机制是否使用过?如果已知散列的方式,则从安全性角度来看,这根本不重要。此外,如果您的代码被泄露,他们为什么还需要令牌?@PeeHaa您能检查我的更新回复吗