当前位置: 首页 > 知识库问答 >
问题:

保护移动应用无需用户身份验证的私有REST API的最佳方法

墨安阳
2023-03-14

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

应用程序和webserver之间的通信必须在REST中进行。这些API应该是私有的,并且只有我的应用程序能够调用它们以获得成功的结果。

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

我想的一个解决方案是嵌入某种硬代码字符串,这样当移动应用程序将使用restful url时,它们将以加密格式通过SSL传递。但我知道这似乎是一个很糟糕的解决方案..

请建议在这种情况下最好的解决方案。

共有3个答案

张卓
2023-03-14

你确实可以让反向工程师的工作变得更难,但却不能像Nasir所说的那样,通过引入数学上的难题并相应地转换你的硬编码字符串来使它防弹。

这样怎么样。假设在app中硬编码了一个数字a。服务器发送两个数字b&P(P是大素数)。现在,您可以使用(a^b)%p计算将由服务器验证的实际数字。您的应用程序现在使用服务器的公钥加密(a^b)%p的答案。服务器将用它的私钥解密它,验证它,并发出一个有过期时间的令牌(可能是jwt)。那么您的应用程序和服务器就可以使用该令牌进行通信。您可以在应用程序引导时执行一次计算,并存储令牌以供进一步使用。

姬和豫
2023-03-14

你是对的,应用程序中嵌入的密钥可以很容易地被数据包嗅探器或各种其他技术检索到。您可以通过使用以下说明来克服此问题。

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

供参考:上述程序是被广泛接受的标准,被称为摘要认证。如果您需要更多帮助,那么只需向谷歌寻求“Android http摘要身份验证”

龙安阳
2023-03-14

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

维基百科链接:http://en.Wikipedia.org/wiki/hash-based_message_authentication_code

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

 类似资料:
  • 我在我的Web api项目中使用Swagger: 等等。我们也使用SwaggerUI。工作起来像个符咒。对于生产,我们不希望swagger UI可用,我们希望使用基本身份验证来保护它。Afaik没有现成的此类功能。有没有一种方法可以通过网络api中的某种“黑客”来实现这一点?我可以只为特定的路由或类似的东西注册专用筛选器吗? 感谢你的帮助问候劳琳

  • 我正在寻找一个谷歌驱动器API认证方案,将给予服务应用程序(服务器上)在驱动器文件夹中创建共享文档的权利,而无需用户交互。 谷歌目前对我应该使用的特定身份验证方案的唯一名称可能是这个问题的足够答案。 虽然文档创建将发生在响应用户的行动,这些文档将不会永久地与这些用户相关联,我不希望要求任何用户提供谷歌帐户。相反,我希望用户能够在文档创建后,通过web页面上显示的“任何有链接的人都可以编辑”类型的U

  • 我希望能够将spring社交链接与应用程序令牌一起使用,就像我可以使用spring社交脸书的变通方法一样(在spring社交面书中使用应用程序访问令牌来查询公共页面)。 我的应用程序只需要查询公共页面,所以不需要针对特定用户进行身份验证:例如,我会查询http://www.linkedin.com/company/google公司的公共页面 我已经阅读了很多留档,但我对目前的情况有点困惑。我认为你

  • 问题内容: 在不使用CMS或繁重框架的情况下,对用户进行身份验证的最佳最新库/方法是什么? 响应中应包含关于您认为应被视为涉及用户身份验证的新PHP开发标准的建议。 问题答案: OpenID是一种基于用户在常见网络服务(例如Yahoo,Google和Flickr)上现有帐户进行身份验证的方法。 登录到您的站点是基于成功登录到远程站点。 您不需要存储敏感的用户信息或使用SSL来保护用户登录。 可以在

  • 我只是想知道如何实现这一点的当前最佳实践是什么,所以我一定会走上正确的道路。