Ios 如果用户登录到其他设备,则自动注销

Ios 如果用户登录到其他设备,则自动注销,ios,web-services,rest,login,access-token,Ios,Web Services,Rest,Login,Access Token,我有一个需要用户登录的应用程序。登录是通过对我的后端REST API的POST请求来处理的,如果登录详细信息正确,它会生成一个新的访问令牌,并将其返回给应用程序(然后保存在密钥链中)。我的问题是,当一个用户同时从多个设备登录时,我如何处理这种情况?首先登录的设备不会意识到其访问令牌已过期,但会继续尝试发送将被拒绝的请求(因为访问令牌不再与存储在数据库中的令牌匹配)。我曾考虑过检查访问令牌是否与我的AppDelegate中viewDidLoad中的数据库令牌匹配,但这仅在首次加载应用程序时有效。对

我有一个需要用户登录的应用程序。登录是通过对我的后端REST API的POST请求来处理的,如果登录详细信息正确,它会生成一个新的访问令牌,并将其返回给应用程序(然后保存在密钥链中)。我的问题是,当一个用户同时从多个设备登录时,我如何处理这种情况?首先登录的设备不会意识到其访问令牌已过期,但会继续尝试发送将被拒绝的请求(因为访问令牌不再与存储在数据库中的令牌匹配)。我曾考虑过检查访问令牌是否与我的AppDelegate中viewDidLoad中的数据库令牌匹配,但这仅在首次加载应用程序时有效。对于这类事情,是否已经建立了最佳实践?如果是,是什么


到目前为止,我想到的最好的解决方案是在用户每次登录时重新颁发相同的访问令牌,但这对我来说似乎不安全。这是一种安全的处理方式吗?

在每次登录时都发布一个新令牌是一种很好的做法。令牌是可消耗的,区分不同设备和浏览器上的用户会话非常有用(参见示例)

有两种可能的方法来处理双重登录场景:

  • 为数据库中的每个用户维护多个活动令牌,并在注销时使每个令牌无效
  • 每个用户只允许一个令牌,使登录时的现有令牌无效

  • 选择取决于应用程序的性质。在第二个实例中,第一个客户端在应用程序进行网络调用之前不会知道其会话无效。此时,服务器应返回一个自定义错误,以指示令牌已过期。然后,应用程序应提醒用户并将其返回到登录屏幕。

    听起来您需要与服务器人员就如何确定令牌是否过期进行对话。在我看来,这应该只是服务器返回的“通过其他设备登录”或“令牌过期”错误。我是服务器人员。我知道如何告诉客户端令牌已过期,我询问令牌何时过期,以及如何在iOS端识别/处理过期令牌。