基本用户身份验证和服务器命中

Basic user authentication and server hits

我有一个应用程序,每个请求都必须经过身份验证。该应用程序使用大量服务器操作,因此调用次数很多。所以如果我理解正确的话,为了让这个应用程序安全,我必须在每个请求中发送 user/session 令牌,并且每次都会根据数据库进行身份验证?

我是后端安全的新手,这是正确的方法吗?有没有办法让这样的应用程序在数据库上不那么费力?安全非常重要,所以如果需要我会支付额外的负载价格...

如果您的身份验证服务发出已签名的令牌,则不需要往返数据库来验证令牌。如果令牌没有过期并且由受信任的颁发者签名,您就知道调用者是谁并且可以授权调用。

另一个优点是这些令牌是无会话的。服务器上不保留任何状态,使您的架构可扩展性更好。

这是很常见的方式。当 token/session 在每个请求上发送并检查它对数据库的有效性时。

token/session "validation" 应该是数据库读操作而不是写操作(异常会话接触),所以它很容易扩展并且在关系数据库上很快。

如果它对您的数据库造成过多负载,您始终可以在 API 和数据库之间构建缓存或使用无状态会话。

第二个选项是 sign/encrypt/hash token/session with key 并在其中放入一些有用的数据,例如 session/tokens 到期时间、userId、accountId、权限等...这样你可以给客户一些自由,只要它没有过期,它就可以使用 token/session 。您可以在应用程序级别验证它,无需数据库查询。

有很多方法可以做到这一点,但始终必须查看所需的性能和安全要求。

good discussion