我正在 Laravel 中设计一个 REST API,用于我的 ios 应用程序。目前我坚持以下几点:如何保护我的 REST API 以仅允许访问我的 ios 应用程序?
我已阅读有关 HTTP 基本身份验证、HMAC、oAuth2 的信息。
1) 基本身份验证需要 SSL,它要求您在每次 api 调用时发送用户名:密码。
2)我了解 HMAC 方法以及客户端和服务器如何知道公钥和私钥。私钥与请求和其他数据一起加密。公钥在 header 中发送。当服务器收到请求时,它会检测 header 中的公钥并将其与数据库中的私钥相关联。然后它重新计算散列并检查它是否匹配。所以,我有以下问题:
3) oAuth2 - 对我来说,这似乎更像是允许人们使用另一个 API 登录我的应用程序。例如,允许用户使用 FB 登录我的应用程序并允许我的 API 使用 Facebook 数据?我现在真的不需要这样做。
听起来我需要通过授予我的 IOS APP 一个私钥来合并类似于 HMAC 方法的东西,我将其存储在我的 IOS APP 代码中。当从 ios 应用程序中运行请求时,我会传递带有私钥和其他数据的哈希值,然后当服务器收到请求时,我会通过重新计算哈希值来检测请求是否来自应用程序内的用户。我不知道这是否安全,我认为它不是?
我缺乏什么知识?我现在很困惑,写这个问题是一场大斗争。一旦事情变得更清楚,我会修改它。
最佳答案
1.
你是对的,这并不能阻止未经批准的客户。
2.
这并不是一种防止未经批准的客户端的真正方法,它更多的是验证消息没有通过网络被篡改。
3.
您正确理解 oAuth,它是关于验证客户端以特定方式使用您的 API 以及限制权限。
锁定您的 API 以便只有特定的客户可以使用它实际上是不可能的,因为无法验证客户的真实身份。此外,在客户端完成的任何形式的身份验证或验证最终都可以进行逆向工程,然后可以作为“批准的”客户端发送到服务器。
像这样的事情可以用 token 来完成。服务器向客户端发送一个 token ,客户端对 token 执行一些已知的操作,例如加盐和散列,使用已知的加盐和散列操作,然后将 token 返回给prove
客户是真实的。
问题是,如果有人对您的客户端进行逆向工程,他们可以确定该操作是什么,然后创建自己的客户端,以相同的方式进行身份验证。任何形式的客户端身份验证都不是真正的安全性,也不可信。
这被打破的另一种方式是,如果有人可以 MiTM 您的请求。请求可以在它到达服务器之前被捕获和修改,除了使用 SSL 之外,没有任何方法可以防止这种情况发生,SSL 可以用 SSLStrip 之类的东西来破坏。
任何阻止未经批准的客户端的尝试基本上都是 security through obscurity ,因为没有一种可证明安全的方法来执行您的要求。
保护您的 API 的最佳方法不是限制哪些客户端可以访问它,而是使其已经安全。最佳实践包括强制使用 SSL、只发送一次密码并从那时起使用 token 进行身份验证等。
关于api - 保护 MY REST API 仅用于 MY IOS APP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26483945/