0

在与后端服务器的任何后续通信中,假设 idtoken 提供的安全性不比用自身的(可能加盐的)SHA2 哈希替换它更安全,这是否正确?

预定流程如下:

  1. Android 应用从 Google 获取 idtoken
  2. 应用程序将 idtoken 发送到自托管后端服务器,后端使用 gitkitclient.VerifyGitkitToken 对其进行验证
  3. 后端创建令牌的 SHA2 哈希以及到期日期和关联的用户 ID,并将其存储在查找表中以供将来参考
  4. Android 应用程序会创建与 idtoken 相同的 SHA2 哈希,并在以后与后端的任何通信中将其传递到标头中,而不是使用 idtoken 进行后续通信。

这会以任何方式降低系统的安全性吗?

如果具有 https 检查的透明代理(以及设备上安装的相应证书,即合法地在公司环境中)会嗅探流量,则获取 idtoken 或它的 SHA2 哈希将没有区别,该透明代理将能够在 idtoken 的整个生命周期内代表 Android 应用程序(可能以粗鲁的方式)采取行动,对吗?

我的问题是在每次与服务器的后续通信时调用 gitkitclient.VerifyGitkitToken 太昂贵了,一旦确定了 idtoken 的有效性,就没有必要了。

我也不希望将 idtoken 存储在服务器上以供将来参考,而是更喜欢它的哈希值。idtoken 的 SHA224 哈希是否足够,是否可以安全地假设它不会导致任何冲突?

4

1 回答 1

1

这需要对身份验证 cookie 中应该包含哪些内容以及各种方法的优缺点进行长时间的讨论。没有一种解决方案适合所有人,应根据应用程序/站点的安全性、性能、可扩展性要求仔细选择解决方案。因此,如果不了解有关应用程序、要求和威胁的更多详细信息,我真的无法对提议的解决方案发表评论。

一般来说,身份验证 cookie/token 有这些基本要求

  • 不可伪造(由您的服务器签名)
  • 应该很容易验证
  • 即使签名秘密被盗,黑客也不应该能够为所有用户创建令牌(例如,可以通过每个帐户的 nonce 来实现)
  • 应该可以从服务器撤销(通过维护服务器端状态来实现)
  • 可以选择与客户端绑定到它已发布,因此如果从客户端窃取将使其无用

我敢肯定还有很多更理想的属性。GITKit 发出 id_token 用于一次性身份验证,开发人员应使用自己的 cookie/token 继续保持应用程序/浏览器的会话。我们知道许多开发人员希望我们提供帮助,我们正在开发一种解决方案,该解决方案将为应用程序提供一个长期有效的 OAuth 刷新令牌(和短期访问令牌),该应用程序可以继续与其家庭服务器一起使用。

于 2015-08-19T07:33:03.667 回答