如何确保服务器仅接受来自移动应用程序的请求

问题描述 投票:0回答:1

我有一个 Node.js 服务器,它将处理来自我的 flutter 移动应用程序的请求。 flutter 应用程序使用 http 模块将请求发送到服务器。 Node.js 服务器使用 CORS。如何确保我的服务器只接受来自我的移动应用程序的请求?.

我注意到一种方法是使用应用程序中生成的应用程序内 API 密钥,并且必须将其发送到服务器。如果 API 密钥有效,则服务器会以适当的响应进行响应。然而,我唯一的问题是,如果有人拦截从移动应用程序发出的这些 http 请求,他们可以查看该 API 密钥并模仿他们自己的 http 请求,就好像它来自我的移动应用程序一样。

发布的另一个解决方案是使用 OAuth 之类的东西。但我不确定这是否是一个解决方案,如果是,请解释我将如何实现它。

展示的另一个解决方案是使用某种 SSL。但它需要证书或其他东西,我不明白它实际上是如何工作的,也不知道它是否可以与 flutter 应用程序一起使用。

请提供您认为适合此问题的任何其他解决方案。

node.js flutter cors httprequest
1个回答
0
投票

您的问题是您的移动应用程序是“公共客户端”。这意味着它无法安全地存储任何可以向 Node.js API 识别自身身份的秘密。这就是为什么 API 密钥方法无效的原因;攻击者可以从其设备上的应用程序中提取它。

最好的方法是忘记设备的身份并使用用户的身份。让他们进行身份验证,并使用他们的身份来确认他们是否可以使用 API。这就是 OAuth / OIDC 的用武之地。OAuth 允许一项服务(在本例中为您的移动应用程序)代表用户访问另一项服务(您的 API)的资源。 OIDC 是 OAuth 之上的一个简单身份验证协议,可让您对用户进行身份验证。 为此,您首先需要找到 OIDC 提供商。您可以在您的用户可能已经拥有身份的地方使用一个身份 - 例如Google 或 Facebook - 如果适用,这样他们就可以使用现有帐户登录。或者,您可以使用 AWS Cognito 等服务来设置自己的服务,您的用户将在其中注册一个新帐户。然后你的应用程序 -> API 调用将像这样:

应用程序启动与 OIDC 提供商的身份验证流程,将用户引导至 OIDC 提供商身份验证页面。
  1. 用户进行身份验证,OIDC 服务重定向回应用程序,并提供一些详细信息,以便应用程序从 OIDC 服务获取访问/ID 令牌。
  2. 应用程序使用 OIDC 服务中的令牌向 API 发出请求。
  3. API 验证从应用程序收到的令牌是否有效并允许访问。
  4. 这些步骤得到简化;查找您选择的 OIDC 提供商通过 PKCE 实施 OIDC。

最后 - 应用程序和 API 之间需要 SSL,或更准确地说现在是 TLS,否则攻击者将能够查看应用程序和 API 之间的数据和令牌。

© www.soinside.com 2019 - 2024. All rights reserved.