服务器端存储用于Android应用程序的令牌的最佳实践是什么

时间:2014-04-16 22:02:31

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

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

(1)令牌有效期多长?

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

1 个答案:

答案 0 :(得分:4)

  

(1)令牌有效期多长?

这可能取决于您实施的功能类型。有些应用程序每次使用一次性令牌,另一次是基于活动的(例如,如果您在一段时间内没有使用它,它会过期),其他应用程序只是不会过期,除非有人手动(这将是Twitter's情况)。这可能取决于您的信息的敏感程度,显然,如果您管理银行/资金转账,安全性应该是您的优先考虑因素,并且可能会缩短有效期。

  

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

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

通常,一个长度至少为16个字符并且使用强大的加密系统(java.security.SecureRandom/dev/urandom等)生成的令牌被视为足够安全用作身份验证系统。

为了避免其他用户伪造来自其他用户的令牌,这种身份验证令牌通常以这种方式生成:

  1. 在服务器端生成一个密钥(让我们称之为S),因为它是一个由健壮的加密系统(java.security.SecureRandom,{{1}生成的至少128位的序列等等)。
  2. 令牌应包含/dev/urandom)的发布时间(T),用户名(N)以及{{>校验和)的完整性检查1}}和N,并以T键入。
  3. 由于服务器是唯一知道S的服务器,因此它可以验证所请求的令牌,并确定它是真还是有效(因为它也基于用户名)。
  4. 我认为这些链接可以帮助您: