Ger*_*man 9 authentication jwt
我们使用Laravel/PHP开发应用程序,并且我们希望使用按用户付费的定价模型.为此,我们必须确保一个帐户只能由一个并发用户使用.我们使用JWT进行身份验证,它是无状态的,所以我不能使用会话.
为了确保一个并发登录,我可以包含浏览器或IP,但两者都不是唯一的,并且它们可能在例如办公室中多次出现.我也可以发送MAC地址,但这不是最简单的方法.
是否有其他解决方案可确保每个用户使用JWT进行一次并发登录?
小智 11
我能想到的唯一答案:
登录时:数据库中的“用户”有一个值 = activeJwt
用户登录并创建 JWT 令牌,将 JWT 字符串复制到数据库中的值 activeJWT 并将其发送给用户。如果您在另一台设备上登录相同的交易,并且 activeJWT 值已更改
在所有需要登录的请求中匹配用户 JWT-string 和 activeJWT,如果它们不匹配,则意味着另一个设备在使旧令牌无用后登录。
我认为对此的简单答案是否定的,你不能通过JWT做到这一点并保持服务器无状态.但是,如果您使用具有访问令牌和刷新令牌的设置,您可能可以实现如下所示:
这将导致登录流程,登录的最新用户可以使用您的服务.如果它实际上是更改设备或重新启动浏览器会话的同一用户,则这很方便.比较Spotify的"追逐流"处理并发侦听的方式.
我唯一能想到的在不保存服务器上状态的情况下执行此操作的方法是禁用在令牌的生命周期内签署新令牌的功能。
| 归档时间: |
|
| 查看次数: |
7245 次 |
| 最近记录: |