通过令牌保护应用程序和 Web 服务之间的通信

Securing Communication between App and Webservice by token

我正在编写一个 android 将与网络服务器通信的应用程序。

到目前为止,我掌握了通信基础知识和基于令牌的身份验证系统。 令牌真的很长,但我仍然担心,有人可以猜到它们。 所以我想到了以下内容。这是一种有效的方法吗?

我的想法:

  1. 应用程序生成 RSA 密钥对。
  2. 通过 ssl 使用邮件和密码登录(向服务器提供 public 密钥)
  3. 服务器生成唯一令牌
  4. 服务器保存令牌和public密钥
  5. 服务器 returns 到应用程序的令牌
  6. 从现在开始,应用程序使用令牌,但使用私钥加密所有消息。
  7. 服务器收到带有令牌的消息。它尝试使用 public 密钥解密数据,以确保此消息来自原始登录。如果无法解密,它会拒绝请求。

这是一种有效的方法吗?还是这个方法太弱了?

好吧,你想做的是一种可能的方法。下面是我对你的想法的一些看法。

  1. 链条的强度与最弱的链条一样强link。您是否考虑过当用户丢失设备时您将如何重置访问权限?凭据够吗?访问邮箱是否足够?攻击者会选择最简单的目标。
  2. 您的方法看起来与 mutual authentication with TLS 非常相似。好吧,如果你愿意,你可以重新发明轮子,但我可能会坚持标准。你不想解决例如问题回复攻击预防,你呢?
  3. 为什么不简单地使用带有 TLS 通道保护的 2FA? U2F 例如,比拥有私人客户端 TLS 密钥更强大。
  4. 使用 RSA 密钥加密长消息很慢。您通常只使用 RSA 加密对称密钥,使用 AES 加密消息的其余部分。

希望这能有所帮助。