【问题标题】:What are the best practices on the server side for storing a token for an android application服务器端存储 android 应用程序令牌的最佳实践是什么
【发布时间】:2014-06-01 00:09:10
【问题描述】:

回答这个问题:What is the most appropriate way to store user settings in Android application,如果我在共享首选项中存储了一个身份验证令牌,使用私有设置,服务器应该如何处理这个令牌?也就是说,

(1) 令牌的有效期应该是多久?

(2) 如何确保其他设备未尝试使用此令牌?

【问题讨论】:

标签: android web-services web-applications authorization access-token


【解决方案1】:

(1) 令牌的有效期应该是多久?

这可能取决于您要实现的功能类型。一些应用程序每次都使用一次性令牌,另一些应用程序是基于活动的(例如,如果您在一段时间内不使用它,它就会过期),其他应用程序只是永远不会过期,除非有人手动这样做(这将是Twitter's 案例)。这可能取决于您的信息的敏感程度,显然,如果您正在管理银行/汇款,安全应该是您的首要任务,并且可能较短的有效期会有所帮助。

(2) 如何确保其他设备未尝试使用此令牌?

这也可能取决于您自己的服务器实现,即您选择实现它的方式。请记住,令牌是由远程服务器生成的随机字符串,您需要保留某种数据库来存储发出的令牌到经过身份验证的用户的映射。当您想使令牌过期时,只需将其从数据库中删除,这样您就可以使数据库保持最新状态,同时您还可以确保不再使用旧令牌。只要攻击者无法创建有效令牌,该令牌就可以(就安全性而言),该令牌是已发出的令牌,存储在您的数据库中并且是最新的(即未过期)。

通常,至少 16 字节长且由强大的加密系统(java.security.SecureRandom/dev/urandom 等)生成的令牌被认为是足够安全用作认证系统。

为了避免其他用户伪造其他用户的token,这个auth token通常是这样生成的:

  1. 在服务器端生成一个密钥(我们称之为S),它是由强大的密码系统(java.security.SecureRandom/dev/urandom 等)生成的至少 128 位序列。
  2. 令牌应包含它的发行时间 (T)、用户名 (N) 和根据N 和@987654332 计算的完整性检查(有点校验和) @,并用 S 键入。
  3. 由于服务器是唯一知道S 的服务器,它可以验证请求的令牌并确定它是真实的还是伪造的(因为它也基于用户名)。

我认为这些链接可以帮助你:

【讨论】:

  • 向服务器请求生成的令牌时,是否有任何信息需要发送,例如 UUID 或 MAC 地址?此应用程序需要与 Twitter 类似的安全级别,而不是银行级别的安全级别。
  • 一旦服务器为特定客户端发出令牌,客户端必须将该令牌提供给服务器并要求服务器执行某些操作。如果您只是想使用该服务器发布令牌并检查令牌是否仍然有效(即,不是服务器执行操作),只需在需要身份验证的操作之前,向服务器发送请求以提供用户当前的令牌。如果服务器回答OK,让用户执行该操作,否则可能会将他们重定向到身份验证屏幕,告诉他们他们的会话已过期。
猜你喜欢
  • 1970-01-01
  • 2020-09-28
  • 2015-08-11
  • 1970-01-01
  • 2016-04-25
  • 2011-06-08
  • 2020-07-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多