我正在开发一个应用程序,其中单个用户只需要一个活动会话,而不管他登录的设备是什么。我尚未对此进行编码,但是我想知道我是否正朝着正确的方向前进方向还是有更好的方法来解决这个问题
此应用程序将始终连接到互联网,因此没有离线模式,因此这是我处理单个会话情况的方法
从DeviceA调用登录服务时,服务器将维护一个sessionId。
如果用户从其他任何设备(DeviceB)进行登录,则服务器将检查是否来自具有DeviceA_sessionID的DeviceA?否则,它将向设备B发送400 BadRequest response
并显示消息“请从您已登录的所有设备上注销以使用该应用程序”
SessionId有效期为2天或一周。
我要在此处解决的主要问题是,我不想具有任何面向设备的依赖关系,因为在进行出厂重置或重新安装应用程序或购买新设备时,vendorId或任何ID可能会更改。
在第2步中,我认为只是终止DeviceA会话并允许使用新的会话ID登录到DeviceB,然后在DeviceA上显示一条消息,表明您的会话已终止,是一个好主意吗?或者只是等到会话结束?
借助服务器上的sessionIds,我可以确保服务器具有确定每次用户仅一个设备会话处于活动状态而其他会话刚刚终止的逻辑。
此外,用户更改了设备,因此我假设使用sessionId仍可以登录并为其新设备创建了新的sessionId,并且服务器可以终止旧设备。
让我知道这是一种有效方法还是有更好的方法来处理这种情况。
答案 0 :(得分:0)
如果您具有任何类型的授权,并且允许设备B中断设备A的会话,则可以刷新每个请求的授权令牌。因此,在进行新的身份验证之后,先前设备的会话将过期。
例如,您可以使用JWT授权令牌。更多here。
答案 1 :(得分:0)
我如何解决此问题的方法是使用sessions
而不是JWT
。不使用JWT的动机是我们没有在此处实现/使用任何声明来与服务器进行任何通信。
此外,当您从其他设备登录时,我们希望旧令牌无效并且服务器可以轻松使会话无效,而JWT的无状态性质不允许我们这样做,并且令牌在有效之前一直有效过期。