代码之家  ›  专栏  ›  技术社区  ›  Varshan Manish

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

  •  0
  • Varshan Manish  · 技术社区  · 2 月前

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

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

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

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

    请提供您认为合适的其他解决方案。

    2 回复  |  直到 2 月前
        1
  •  1
  •   Albert Roy    2 月前

    最近Firebase发布了一个名为 Firebase App Check 请看一下。这可能会解决你的问题陈述。

    https://firebase.google.com/docs/app-check
    
        2
  •  0
  •   andycaine    2 月前

    你的问题是你的移动应用程序是一个“公共客户端”。这意味着它不能安全地存储任何可以向node.js API标识自己的秘密。这就是API关键方法无效的原因;攻击者可以从设备上的应用程序中提取它。

    最好的办法是忘记设备的身份,使用用户的身份。让他们进行身份验证并使用 他们的 身份以确认他们是否被允许使用API。这就是OAuth/OIDC的用武之地。OAuth允许一个服务(在本例中为移动应用程序)代表用户访问另一个服务的资源(API)。OIDC是OAuth之上的一个简单的身份验证协议,允许您对用户进行身份验证。

    为此,您首先需要找到OIDC提供商。如果合适的话,你可以在你的用户可能已经有身份的地方使用一个,例如谷歌或脸书,这样他们就可以用现有的帐户登录。或者,您可以使用AWS Cognito等服务设置自己的帐户,您的用户可以在其中注册新帐户。然后是您的应用程序->API调用将执行如下操作:

    1. 应用程序启动与OIDC提供商的身份验证流程,将用户引导到OIDC提供商身份验证页面。
    2. 用户进行身份验证后,OIDC服务将重定向回应用程序,并提供一些详细信息,以便应用程序从OIDC服务获取访问/id令牌。
    3. 应用程序使用OIDC服务的令牌向API发出请求。
    4. API验证从应用程序接收的令牌是否有效并允许访问。

    这些步骤被简化了;向您选择的OIDC提供商咨询如何使用PKCE实现OIDC。

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