所以我正在使用Xamarin Android制作一个供公司客户使用的Dropbox应用程序(并且不会在Playstore上发布)。由于其所有用户都使用相同的保管箱帐户,因此应用程序的访问令牌在源代码中是硬编码的,如下所示:
var dbx = new DropboxClient("abc_token_xyz")
我觉得这不是最好的方法,因为如果有人抓住他们的手,他们可以反编译应用程序并看到令牌。
我的问题是保护令牌的最佳方法是什么?或者我应该使用这种方法吗?
答案 0 :(得分:1)
访问令牌对于设备应该是唯一的,而不仅仅是用户。 个别设备令牌需要单独撤销访问,这是您必须考虑的事项:如果设备丢失/被盗怎么办?如果设备的用户销售设备/设备被更换怎么办?
每次设备丢失/被盗/转移/退役时,在所有设备上推出新版本实际上都不是你想要的。
这个答案独立于令牌的服务而有效(我不知道Dropbox'细节)。 为所有用户使用相同的Dropbox帐户可能是个坏主意(出于法律和/或安全原因)。例如,您应该确保单独使用令牌不足以更改密码或影响其他令牌,或者如果设备丢失,即使每个设备有不同的令牌,您的安全性也无效。另外,我不知道你提出的建议是否违反了他们的ToS。
答案 1 :(得分:1)
Dropbox API旨在让每个用户链接自己的Dropbox帐户,以便与自己的文件进行交互。但是,正如您所示,技术上可以连接到一个帐户。
如前所述,问题是可以从应用程序中提取访问令牌。除了Dropbox API之外,这是一个更基本的问题。也就是说,客户端应用程序无法保密[/ strong>]。虽然你可以采取各种尝试来使提取令牌变得更加困难,但你无法让它成为不可能。
出于这个原因,非常不推荐这种方法。一旦有人拥有访问令牌,他们就可以使用它来绕过您试图强制执行的任何访问控制,甚至撤销访问令牌本身,从而破坏您的应用。
虽然稍微解决了你的第一个问题,但你可以:
此外,这两种技术都无法防止某人在设备上执行中间人攻击(通过在设备上安装可信证书)并检查来自应用程序本身的API调用以查看令牌。