【问题标题】:Best approach to keep user session alive in Mobile apps在移动应用中保持用户会话活跃的最佳方法
【发布时间】:2017-05-06 13:21:43
【问题描述】:

我们开发了一个移动应用程序(Android 和 iOS),该应用程序具有自定义登录和有限的会话到期时间(3 天)。会话将在 3 天后过期,我们将显示登录页面以重新登录。

但我们不想向用户显示登录页面。什么是最好的方法来做到这一点。

方法一:

在服务器端,不要将过期日期设置为生成的会话。这样该会话在用户注销之前不会过期。

方法2:

在 UI 中,将用户名和密码保存在 sqlite 等永久存储中。当会话过期时(在我的情况下为 3 天后),UI 必须发送 hidden 登录调用以获取新会话ID。在这种情况下,我们不会重定向到登录页面。

其他移动应用程序如何在用户注销之前保持会话 ID 处于活动状态。

请向我推荐除上述 2 种方法之外的任何其他最佳方法。

【问题讨论】:

  • 但是登录后数据服务器会发给你?
  • 它是否包含任何令牌?
  • 在登录调用响应中,服务器将连同会话ID一起发送响应。我们在每个 API 调用中发送该会话 ID。在每次调用中,服务器都会验证该会话 ID。如果该会话已过期,则服务器正在发送“令牌已过期”消息。因此,我们正在重定向到登录页面。除登录 API 调用外,服务器未在任何其他 API 调用中发送会话。
  • 我认为只有这2种方法,而不是延长会话而不是在应用程序上保存用户名和密码
  • 在手机上存储凭据并不是一个好的安全方法。 mobilesecurityares.blogspot.in/2014/12/…

标签: android ios cordova login hybrid-mobile-app


【解决方案1】:

您可以使用以下方法来解决您的问题,我遇到了同样的问题并使用了相同的方法:

服务器应该用你的 sessionId 发送一个额外的 RefreshToken。 或者服务器应该提供不同的 API 来使用该 refreshToken 刷新您的 sessionId。

假设您收到“invalid token”错误,那么您需要按照以下步骤操作:

  • 使用上次保存的 RefreshToken 调用 RefreshToken API。
  • 服务器应刷新该 sessionID 并将 expiryTime 重置为 3 天,并使用新的 SessionID 回复您。
  • 只有当您再次注销/登录时,服务器才应在其末尾创建新的 RefreshToken 并且 3 天到期(意味着用户 3 天未使用应用程序,因此他应该注销)。
  • 因此,您应该仅在 RefreshToken 过期时注销。
  • 您将获得新的 sessionID,然后将其用于进一步的请求以及出现该错误的请求。

【讨论】:

  • 在调用 RefreshToken API 时,服务器会创建新的 sessionID 吗?还是具有新到期日期的相同会话 ID?
  • 为什么这种 refreshToken 方法更好?有什么额外的优势吗?
  • 两者都可以。. 取决于您的安全问题。
  • 是的,因为保存用户名密码不是一个好的安全方法。
  • 对.. 但是当您收到 invalidToken 错误时,请求在 Refrestoken 请求之间被调用.. 您需要等待获取新令牌。
猜你喜欢
  • 1970-01-01
  • 2010-10-22
  • 2016-05-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多