9

作为一名移动开发人员,我正在寻找一种解决方案,该解决方案允许我的应用程序用户下载多个 .zip 文件,从而为我的应用程序添加“模块化”感觉。我在另一个应用程序中使用了 Dropbox API 来允许用户将项目备份到他们的帐户,但现在我需要用户访问我的帐户。

有没有办法自动验证 Dropbox 会话到我的帐户,或者只是连接到我的公共文件夹而用户甚至没有注意到?

后续问题

将我的访问密钥和应用程序密钥/秘密硬编码到应用程序中会带来哪些安全隐患?我知道从 .apk 获取源代码相当简单,但是有人可以用这些信息做什么呢?

4

3 回答 3

7

这不是 API 的预期用途,但您可以手动为您的应用程序授权一次访问令牌,然后以编程方式在您的应用程序的所有实例中嵌入和重用该访问令牌。(不过,您需要注意不要意外撤销该访问令牌。)不过,此方法可能存在安全性和速率限制问题,具体取决于具体情况。

或者,使用链接的其他方法可能会更容易。只需制作所需的链接(并在必要时转换为直接链接),然后从中下载。(此外,Dropbox 当然不是 CDN,因此请注意带宽限制。)

后续答复

如果您将应用令牌和访问令牌嵌入到应用中,攻击者可能会提取这些令牌,然后可以(通过 API)对您的 Dropbox 的尽可能多的应用访问权限(任一应用文件夹)进行读/写/删除访问或完整的 Dropbox,具体取决于您的 API 应用程序),而不管您的应用程序本身通常会尝试强制执行的任何限制。出于这个原因,您不希望使用此方法来存储任何私人信息,例如任何私人用户特定文件。

于 2013-02-22T17:36:47.563 回答
1

一段时间过去了,但现在 Dropbox 将让您生成公共访问令牌并在您的代码中使用它

所以是的,有一种方法可以允许永久访问 Dropbox API。我们需要从应用程序设置(保管箱控制台)生成访问令牌并使用它。这是 Dropbox 所说的:

通过生成访问令牌,您将能够为您自己的帐户进行 API 调用,而无需通过授权流程。要获取其他用户的访问令牌,请使用标准 OAuth 流程。

用暗语:

AndroidAuthSession session = buildSession();
mApi = new DropboxAPI<AndroidAuthSession>(session);

    private AndroidAuthSession buildSession() {
        AppKeyPair appKeyPair = new AppKeyPair(APP_KEY, APP_SECRET);
        AndroidAuthSession session = new AndroidAuthSession(appKeyPair, ACCESS_TOKEN);
        // I guess then you just have to instantiate a DropboxAPI object and you're good to go without the startAuthentication()... endAuthentication() etc.
        return session;
    }

and here we go just use the mApi to do whatever you want

于 2016-05-27T13:40:58.497 回答
0

将我的访问密钥和应用程序密钥/秘密硬编码到应用程序中会带来哪些安全隐患?

有足够动力的人最终会得到你的访问密钥。

我知道从 .apk 获取源代码相当简单,但是有人可以用这些信息做什么呢?

他们可以用这些信息做任何你能做的事情。

于 2013-02-22T22:22:04.270 回答