Session 如何使用无状态/基于令牌的身份验证防止登录凭据共享?

Session 如何使用无状态/基于令牌的身份验证防止登录凭据共享?,session,authentication,stateless,Session,Authentication,Stateless,我有一个非常简洁的基于令牌的身份验证方案,它不需要服务器上的会话存储。在每次经过身份验证的调用中,都会在一个头部发送一个加密的JSON负载,该头部保存会话信息。服务器可以解密JSON令牌并获取用户ID、组织ID、到期日等信息。这真是太糟糕了,我喜欢它 今天,一位客户问他是否可以共享他的登录凭据,以便他的团队中的其他人可以登录。在我目前的系统中,这是可能的。问题是,我们按座位收费,所以我们不想允许凭证共享 我很想保留我的无状态身份验证机制,因为它给女士们留下了深刻的印象。我不希望在服务器上安装跟踪

我有一个非常简洁的基于令牌的身份验证方案,它不需要服务器上的会话存储。在每次经过身份验证的调用中,都会在一个头部发送一个加密的JSON负载,该头部保存会话信息。服务器可以解密JSON令牌并获取用户ID、组织ID、到期日等信息。这真是太糟糕了,我喜欢它

今天,一位客户问他是否可以共享他的登录凭据,以便他的团队中的其他人可以登录。在我目前的系统中,这是可能的。问题是,我们按座位收费,所以我们不想允许凭证共享

我很想保留我的无状态身份验证机制,因为它给女士们留下了深刻的印象。我不希望在服务器上安装跟踪当前登录的用户的东西,或者其他什么东西


但我想不出一种无状态的方式来阻止人们共享凭证。有可能吗?

无状态。。。你从来没有真正做到100%。我想把这个加入你的机制,但我不推荐

让我们看看您的令牌,它是关于您如何生成它的,您当前可能正在某个数据库中存储一些随机数,所以您已经有了一些状态。相反,您要做的是在客户端登录时根据其可识别信息生成令牌。例如用户代理字符串和IP地址。然后对这些值和一些令牌(例如存储在服务器上的salt密码)进行校验和

当经过身份验证的请求进入时,您每次都必须重新创建令牌以检查它是否有效,这使得它在计算上非常昂贵。这也可能是一个安全风险,暴露你的客户盐密码

但是这样做有什么意义呢?您将强制您的客户端在每次IP更改时重新验证。相反,冷静点,检测使用同一帐户的多个IP和用户代理,然后封锁该帐户一个小时左右

在服务器上保存整个会话信息要好得多,您不必花费处理能力,存储便宜,会话的memcached也没那么糟糕。而且,你忘了说你没有状态有点谬误。。。因为您仍然在服务器上存储令牌