ios - 如果用户在另一台设备上登录,则自动注销用户

标签 ios web-services rest authentication access-token

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

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

最佳答案

在每次登录时颁发新 token 是一种很好的做法。 token 是可消耗的,区分不同设备和浏览器上的用户 session 很有用(参见 Facebook's session management 示例)。

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

  1. 为数据库中的每个用户维护多个事件 token ,并在注销时使每个 token 失效
  2. 每个用户只允许一个 token ,在登录时使现有 token 无效

选择取决于您的应用程序的性质。在第二种情况下,第一个客户端在应用程序进行网络调用之前不会知道其 session 无效。届时,您的服务器应返回自定义错误以指示 token 已过期。然后,该应用应提醒用户并将他们返回到登录屏幕。

关于ios - 如果用户在另一台设备上登录,则自动注销用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23463187/

相关文章:

ios - 使用自定义顺序对 NSArray 进行排序

ios - 如何从其中包含许多 UITextview 的 UIView 复制和检索数据

ios - 我应该使用哪种应用内购买?

java - 带有 javax.ws.rs.core.Application 的 MultiPartFeature

python - Django 休息 : custom styling

ios - Swift - 检查 UIImageView 的大小

java - 在java eclipse中在localhost上发布Web服务

python - 将复杂数据类型与 python SUDS 客户端一起使用

java - 从 Restful Web 服务下载 pdf

ruby-on-rails - 销毁记录时应该渲染什么?