我有一个应用程序,每个请求都必须经过身份验证。该应用程序使用大量的服务器操作,因此有很多调用。因此,如果我理解正确,为了使这个应用程序安全,我必须发送每个请求的用户/会话令牌,每次它将根据数据库进行身份验证?
我是制作后端安全的新手,这是正确的方法吗?有没有办法让这样的应用程序在DB上不那么费劲?安全性非常重要,因此如果需要,我会支付额外的负载价格......
答案 0 :(得分:1)
如果您的身份验证服务发出签名的令牌,则无需往返数据库以验证令牌。如果令牌尚未过期且由受信任的颁发者签名,则您知道呼叫者是谁并且可以授权该呼叫。
另一个优点是这些令牌是无会话的。服务器上没有任何状态,使您的架构更好。
答案 1 :(得分:0)
这是非常常见的方式。在每个请求上发送令牌/会话并检查其对DB的有效性时。
令牌/会话"验证"应该是DB读操作不写(异常会话触摸),所以它很容易扩展,并且它在关系数据库上很快。
如果它对您的数据库造成太多负载,您始终可以在API和数据库之间构建缓存或使用无状态会话。
第二个选项是用密钥对令牌/会话进行签名/加密/散列,并在其中放入一些有用的数据,如会话/令牌到期时间,userId,accountId,权限等......这样你就可以给客户端了一些自由,它可以使用令牌/会话,只要它没有过期。您可以在应用程序级别验证它,而无需进行数据库查询。
有很多方法可以做到这一点,但总是要考虑所需的性能和安全要求。