2016-04-15 130 views
1

因此,我使用Xamarin Android制作了供公司客户使用的Dropbox应用程序(并且不会在Playstore上发布)。由于它的所有用户都使用相同的Dropbox帐户,应用程序的访问令牌在源代码中被硬编码是这样的:保护Dropbox访问令牌

var dbx = new DropboxClient("abc_token_xyz") 

我有一种感觉,这是不是最好的方法,因为如果有人得到了他们的手apk,他们可以反编译应用程序并查看令牌。

我的问题是,什么是保护令牌的最佳方式?或者我应该甚至使用这种方法?

+0

我敢肯定,这是违反DropBox的服务条款。最好先与他们核实一下。 – 323go

回答

1

Dropbox API的设计意图是每个用户都会链接自己的Dropbox帐户,以便与他们自己的文件进行交互。但是,正如您所示,在技术上可以连接到一个帐户。

正如已经讨论的那样,问题是可以从应用程序中提取访问令牌。除了Dropbox API之外,这是一个更基本的问题。也就是说,客户端应用程序不能保守秘密。虽然您可以采取各种尝试来提取令牌更加困难,但不能使其无法实现。

出于这个原因,这种方法是非常不推荐。一旦有人拥有访问令牌,他们就可以绕过您尝试强制执行的任何访问控制,甚至可以撤销访问令牌本身,从而中断您的应用。

要有所解决您的第一个问题,虽然,您可以:

  • 混淆令牌在你的代码,这样,当应用程序被检查它不是一个简单的字符串。我相信Java中已经有很好的混淆资源了。请注意,它可以不被混淆。
  • 加密访问令牌。请注意,加密密钥也需要可用于应用程序,因此它也可以被提取,以解密访问令牌。

此外,这两种技术都不能防止某人在设备上执行中间人攻击(通过在设备上安装可信证书)并检查应用程序本身的API调用看到令牌。

1

访问令牌对设备而言应该是唯一的,而不仅限于用户。 个别设备令牌需要单独撤销访问,这是您必须考虑的事情:如果设备丢失/被盗,该怎么办?如果设备的用户销售设备/设备被更换会怎么样?

每次设备丢失/被盗/传输/退役时,在所有设备上推出新版本实际上并不是您想要的。


这个答案独立于令牌的服务是有效的(我不知道Dropbox的具体细节)。 由于法律和/或安全原因,对所有用户使用相同的Dropbox帐户可能是一个糟糕的主意。例如,您应该确保单独使用令牌不足以更改密码或影响其他令牌,或者如果设备丢失,则安全性无效,即使每个设备有不同的令牌也是如此。另外,我不知道你的建议是否违反了他们的ToS。

+0

我没有想到...谢谢。但根据我的要求,从所有设备累积的数据需要集中在同一个Dropbox帐户上,因此独立帐户不是一种选择。 –