【问题标题】:REST API authentication for mobile application iOS and Android用于移动应用程序 iOS 和 Android 的 REST API 身份验证
【发布时间】:2019-07-25 15:50:08
【问题描述】:

我想通过移动应用程序 (react-native) 安全地访问 REST API(.net)。我有以下解决方案,但每个都有其缺点。有人可以建议我解决问题的方法吗?

1.

REST API:带有用户名和密码的安全 REST API。

移动应用:每次调用 REST API 时发送用户名和密码。

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

2.

REST API:已实现 auth 2

Mobile App:调用Rest API获取Token以备后用,但第一次需要通过auth凭证获取Token。通过逆向工程可以得到相同问题的用户名和密码。

我们如何将应用机密移出应用并从移动应用安全访问 REST API?

【问题讨论】:

  • 我更喜欢使用 Oauth 2。我在我的 react-native 项目中使用了它。丢失令牌与丢失用户名和密码不同。通过使用 Oath2,如果你丢失了你的令牌,黑客就不能用它做太多的事情。另外,我们可以根据需要撤销token
  • 但是你是如何获得第一次使用的令牌的?您是否将用户名和密码传递给 API?如果是,您将用户名和密码存储在哪里? @VuLuu
  • 我不存储密码。当用户登录时,我们创建一个 POST 请求,.如果黑客窃取了该请求,他们就无法读取用户名和密码,因为凭据是经过编码的。用户登录成功后,只存储Token
  • 我的应用没有登录,但它会在每次安装时在后台创建一个具有唯一 ID 的用户。

标签: rest react-native security asp.net-web-api oauth-2.0


【解决方案1】:

您应该考虑实现Authorisation Code Grant with PKCE

这是一个 example project 做类似的事情。

【讨论】:

  • 问题是我的应用程序没有登录名和密码,但它会在第一次打开应用程序时创建具有唯一 ID 的用户。那怎么处理?如何为第一次使用生成令牌。
【解决方案2】:

给你的三件事:

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) 带有 PKCE 的 OAuth2 不会阻止模拟攻击,特别是如果您正在创建具有首次使用信任的用户,您将更容易受到机器人攻击。您应该做的不仅仅是简单的 API 密钥。我会推荐一些经过良好混淆的 API 调用签名,或者更好的是某种形式的应用程序证明。对于 React Native,请参阅 First experiences with React Native: bridging an Android native module for app authentication 或类似的 iOS

【讨论】:

    猜你喜欢
    • 2014-02-25
    • 1970-01-01
    • 2014-05-15
    • 1970-01-01
    • 2013-08-21
    • 2014-03-02
    • 2016-10-22
    • 2021-12-26
    • 2013-04-28
    相关资源
    最近更新 更多