我应该加密我的Dropbox应用程序密钥/密钥吗?

时间:2013-07-19 20:25:34

标签: ios dropbox

我们正在为我们的应用添加Dropbox支持,现在我们有了一个“app key”和“app secret”。我可以将它们保存为代码中的纯文本,如同步API教程中所列:

   DBAccountManager* accountMgr =
    [[DBAccountManager alloc] initWithAppKey:@"hf2hf892hf9y29h" secret:@"n29fh82h4f"];

(注意:这是一个弥补的密钥和秘密,而不是我们真实的密钥。)

但是如果他们愿意的话,有人可以从应用程序中提取它们。为了防止这种情况,我们可以添加某种基本加密来使密钥更难找到,但显然密钥仍然会在某些时候调用DropBox客户经理,所以没有办法让它们保持完美安全

这是否是任何人担心的事情,或者只是一个真正想要的人可以进入并找到钥匙的事实?

3 个答案:

答案 0 :(得分:2)

  

这是否有人担心

任何理智的开发者都担心它。请使用某种形式的加密。

提示:我的态度 - 当我从AppStore下载应用程序时需要某种形式的登录[在此处插入任意web服务],我通常会解密二进制文件并运行otool或至少strings在上面。如果它中有明文密码/ OAuth密钥/ SSL密钥对等,我通常会立即将其删除。

  

真正想要的人可以进入并找出钥匙,这只是生活中的一个事实吗?

实际上,yes, even the keychain isn't secure ;-)。但是,如果主题是您的数据和/或您的用户的安全性,那么,如果没有尽力做到最好,

答案 1 :(得分:0)

首先,您的担忧是有效的。你应该把它放在钥匙串里。

然而,正如Carbonic Acid已经说过的那样,没有什么是完全安全的,甚至连钥匙链都没有。有时人们会把注意力集中在一个安全威胁上,而忽视另一个更大的问题。这很像优化,(除了表现安全性而不是性能之外)。

你不需要让你的秘密无法窃取,偷窃的成本要高于其他地方。而Dropbox API键并不完全是母鸡。

答案 2 :(得分:0)

一个更新的答案,以防其他人偶然发现这个问题。

Dropbox API OAuth 2.0 现在具有 PKCE,它不需要客户端密码来生成访问令牌。他们甚至在 their oauth guide:

中特别概述了这个用例
<头>
如果您的应用是 应该
需要后台访问的客户端桌面应用或移动应用 将 OAuth 代码流与 PKCE 结合使用,并带有刷新令牌。

如果您查看 /oauth2/token API 文档示例,您会看到 PKCE 方法使用客户端机密。

这个附加指南 - PKCE: What and Why? - 提供了一些实现它的基本信息。

编辑:

PKCE 什么时候不合适?

在 Dropbox 实现的情况下,当您需要在后台访问 Dropbox API(即没有用户交互)时,PKCE 合适。这是因为 oauth/token 不会授予您刷新令牌。 (刷新令牌用于在没有用户交互的情况下生成新的访问令牌

要在使用 PKCE 时获取刷新令牌,您需要提供 token_access_type=offlineoauth2/authorize(类似于他们的代码流程)。在这一点上,我不知道为什么他们的指南推荐使用刷新令牌的代码流,如果 PKCE 可以在不存储或使用客户端密钥的情况下实现相同的