【问题标题】:Storing API keys in the cloud for an iOS app在云中存储 iOS 应用程序的 API 密钥
【发布时间】:2016-03-23 21:02:24
【问题描述】:

我正在尝试找到一种方法来在云中存储 3rd 方服务的 API 密钥(例如,我想连接到 twitter,我需要 api 密钥和密钥来发出 oauth 请求)

我正在寻找一种将其存储在云中并以某种方式按需使用它的方法(我不想将其嵌入应用程序本身)。我不希望 api 密钥和密钥易于访问,但仍希望用户能够发出 3rd 方 api 请求。

我不是安全专家,所以我突然想到了以下想法:

  1. 将 api 密钥和秘密存储在我的服务器上(例如存储 twitter api 密钥/秘密)
  2. 每当用户想要向第 3 方服务发出请求时,iOS 应用都会向我的服务器请求应用密钥/密钥对
  3. 当 iOS 客户端收到密钥/秘密时,它会使用刚刚从我的服务器收到的应用程序密钥/秘密(加上用户凭据)启动 oauth 身份验证过程

只要我通过 https 发送/接收密钥/秘密值,这是否足够安全?还是我需要进一步加密它们?这还不够吗?

【问题讨论】:

  • 最好在 security.stackexchange.com 上问这个问题

标签: api security authentication encryption oauth


【解决方案1】:

我不建议您将第三方服务的客户端凭据(API 密钥和秘密)返回给您的客户。您不能在 iOS 应用等公共客户端上对这些事情保密。

更好的方法是让您的服务器调用第 3 方 API 并将结果代理回您的应用。这样一来,API 密钥和秘密就可以安全地存储在您的服务器上,如果第 3 方 API 发生变化,您只需更新您的服务器代码,而不是所有 iOS 应用程序。

【讨论】:

  • 这不会限制我的 api 使用吗?我试图找到一种方法来做到这一点,因为这样每个用户都向第 3 方 api 发出请求,每个用户都有自己的 api 配额,而如果我的服务器充当 api 代理,它基本上是一个用户(我的服务器)代表我的所有用户向 API 发出所有请求。
  • @Vlad API 密钥用于 OAuth2 客户端凭据流,以授予应用程序代表自己访问资源的权限。如果您想代表用户访问资源,您应该查看授权代码流程并请求离线访问。授权服务器将发出一个刷新令牌,您的应用程序可以使用它来获取访问令牌。
猜你喜欢
  • 2016-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-22
  • 1970-01-01
  • 2017-01-22
  • 1970-01-01
相关资源
最近更新 更多