保护移动应用程序访问的REST-API,无需登录

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

我想通过移动应用程序(react-native)安全地访问REST API(.net),该应用程序没有登录,但是当应用程序第一次打开时,后台会创建一个具有唯一ID的用户。

客户端应用程序 - 可以使用某些UID进行识别。

后端服务 - 客户端应用程序需要调用以检索某些列表。

获得此后端服务的最佳做法是什么?我不希望通过登录/密码进行保护(因为客户端不应该被要求“登录”以检索列表),但是,我不希望任何人轻易地调用此后端API并为自己检索这些列表目的。

规格:该应用没有登录。所以我如何获得首次使用的令牌,并可以使API安全。

REST API:使用用户名和密码的安全rest API。

移动应用程序:每次休息API调用都会发送用户名和密码。

缺点:在逆向工程中获取用户名和密码,该密码存储在移动应用程序中。代码被混淆,密码存储在地方,但黑客在做了一些努力后成功获得了密码。

如何向REST-API发送安全调用,因为应用程序没有登录名并且无法通过HTTP发送凭据以获取令牌?

rest api react-native security mobile
2个回答
1
投票

您无法避免人员进行逆向工程并获取您的API密钥(或硬编码用户/密码组合)。您可以更加努力,例如在与服务器通信期间强制执行带有证书固定的HTTPS或应用基于IP的API速率限制,这样人们就无法轻易监视通信或转储您的API返回的任何内容,但是您无法制作这不可能。期望人们始终拥有与您的应用程序(在他们的设备上)相同的权限。在您的情况下,这意味着攻击者也可以生成无限制的UID,因为它们是由客户端请求生成的。这使得使用UID进行任何类型的严重身份验证都是无用的。

我的意思是,毕竟攻击者也可以编写代码来自动使用你的应用程序来提取你想要保护的信息,即使他无法拆解你的应用程序。您要求的是不可能的。


1
投票

这看起来非常类似于几天前的问题REST API authentication for mobile application iOS and Android

1)听起来用户授权不是主要问题,但我肯定会建议OAuth2重复发送用户名密码。它很好理解,并且有开源和免费商业实现。在移动设备上,PKCE对于防止Auth Code拦截攻击非常重要。

2)为您的REST API调用使用HTTPS是给定的,但我鼓励您也固定这些连接。攻击者可以轻易地破坏移动设备,否则您的API会调用中间人。对于React Native来说,固定很棘手;看看react-native-cert-pinner npm package和/或阅读Strengthen TLS in React Native through Certificate Pinning (Android)iOS

3)使用静态API密钥几乎​​不可能防御。如果同时使用OAuth2,PKCE也不会停止模拟攻击,特别是如果您要识别具有首次使用信任的用户,您将非常容易受到机器人攻击。比API密钥更好的一步是使用您的API密钥签署您的API调用。这样,至少您的API密钥在API调用本身中不可见。您需要添加一些熵以防止重放攻击,并且在应用程序中混淆API密钥至关重要。更好的是,使用某种形式的应用证明,完全从应用程序中删除API密钥。对于React Native,请参阅First experiences with React Native: bridging an Android native module for app authentication或类似地了解iOS以了解此方法。

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