2016-04-15 189 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帳戶上,因此獨立帳戶不是一種選擇。 –