保护Dropbox访问令牌

时间:2016-04-15 02:52:07

标签: android security xamarin dropbox

所以我正在使用Xamarin Android制作一个供公司客户使用的Dropbox应用程序(并且不会在Playstore上发布)。由于其所有用户都使用相同的保管箱帐户,因此应用程序的访问令牌在源代码中是硬编码的,如下所示:

var dbx = new DropboxClient("abc_token_xyz")

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

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

2 个答案:

答案 0 :(得分:1)

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

每次设备丢失/被盗/转移/退役时,在所有设备上推出新版本实际上都不是你想要的。

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

答案 1 :(得分:1)

Dropbox API旨在让每个用户链接自己的Dropbox帐户,以便与自己的文件进行交互。但是,正如您所示,技术上可以连接到一个帐户。

如前所述,问题是可以从应用程序中提取访问令牌。除了Dropbox API之外,这是一个更基本的问题。也就是说,客户端应用程序无法保密[/ strong>]。虽然你可以采取各种尝试来使提取令牌变得更加困难,但你无法让它成为不可能。

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

虽然稍微解决了你的第一个问题,但你可以:

  • 在代码中混淆令牌,以便在检查应用程序时它不是一个简单的字符串。我确信已经有很好的资源可用于Java中的混淆。请注意,它可以是非混淆的。
  • 加密访问令牌。请注意,加密密钥也需要可供应用程序使用,因此也可以将其解压缩,以便解密访问令牌。

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