REST API authentication for mobile application iOS and Android
我想通过移动应用程序(本机)安全地访问REST API(.net)。我有以下解决方案,但每个解决方案都有其缺点。有人可以建议我解决问题的方法吗?
1。
REST API:带有用户名和密码的安全REST API。
移动应用:每次进行其余的API调用时发送用户名和密码。
退税:
在进行逆向工程时,将获得存储在移动应用程序中的用户名和密码。代码被混淆,密码存储在各个地方,但是黑客经过一定的努力后才成功获取密码。
2。
REST API:已实现身份验证2
移动应用程序:调用Rest API以获取令牌以备将来使用,但这是首次通过身份验证凭据以获取令牌。可以通过逆向工程获得相同的问题用户名和密码。
我们如何将应用程序秘密移出应用程序,以及如何从移动应用程序安全地访问REST API?
您应该使用PKCE来实现授权码授予。
这是一个类似的示例项目。
为您提供三件事:
1)我肯定会推荐OAuth2,而不是反复发送用户名密码。这是众所周知的,并且有开源和免费的商业实现。在移动设备上,PKCE对于防止Auth Code拦截攻击非常重要。
2)使用HTTPS进行REST API调用是已知的,但我也建议您固定这些连接。攻击者可以轻易破坏移动设备,否则,中间人就会调用您的API。对于React Native,固定是棘手的。请查看react-native-cert-pinner npm软件包和/或阅读通过证书固定(Android)或iOS增强React Native中的TLS。
3)带有PKCE的OAuth2不会阻止模拟攻击,尤其是如果您要创建具有首次使用信任的用户时,您将更容易受到机器人攻击。您应该做的不仅仅是简单的API密钥。我建议对API调用进行一些模糊的签名,或者更好的是,对应用程序进行某种形式的证明。对于React Native,请参阅React Native的初步经验:桥接Android本机模块以进行应用程序身份验证或类似地适用于iOS。