保护私有 REST API 的最佳方式,无需对移动应用进行用户身份验证

2022-08-30 16:45:06

我正在为我的移动应用程序制作一些Restful API。

APP和Web服务器之间的通信必须在REST中进行。这些 api 应该是私有的,只有我的应用才能调用它们才能获得成功的结果。

困难的部分是,我的应用程序中不需要用户ID和密码,因此我不知道如何在没有基本用户身份验证的情况下使用移动应用程序限制rest API。

我认为的一个解决方案是嵌入某种硬编码字符串,因此当移动应用程序将使用宁静的URL时,它们将以加密格式传递到ssl上。但我知道这似乎是非常糟糕的解决方案。

请建议在这种情况下应该是什么最好的解决方案。


答案 1

请看一下基于哈希的消息身份验证代码 (HMAC) 机制。

维基百科链接: http://en.wikipedia.org/wiki/Hash-based_message_authentication_code

客户端(移动应用)将需要标识 REST Web 服务客户端的公共 API 密钥和专用/加密密钥。公共 API 密钥可以与 HTTP 请求一起发送。它是公开的,每个人都可以看到它。但是,私钥永远不应与请求一起发送,而只能由服务器和客户端知道。此密钥用于生成将发送到服务器的哈希消息。HMAC可以使用SHA1 / MD5算法生成,SHA1 / MD5算法应由服务器和客户端都知道的算法以及最终的私钥生成。


答案 2

你是对的,应用程序中的嵌入式密钥可以通过数据包嗅探器或其他各种技术轻松检索。您可以按照说明解决此问题。

  • 客户端(你的应用)将调用所需的 API
  • 服务器将拒绝它,但在响应中,它将发送一个包含随机哈希(=质询)的字符串。
  • 客户端将该字符串与其他字符串(=密码)(已嵌入到应用程序中)结合使用以生成新的哈希(=摘要))
  • 客户端将再次调用相同的 API,但这次使用新创建的摘要作为身份验证参数。
  • 服务器将验证该摘要并将继续

仅供参考:上述程序是公认的标准,被称为摘要式身份验证。如果您需要更多帮助,那么只需向Google询问“android http摘要式身份验证”


推荐