1

我有一個簡單的遊戲,您可以選擇購買保費。如果這樣做,我在Google數據存儲的用戶表中將您的版本值從0更改爲1。在數據庫中保存敏感數據 - 安全服務器通信

我還有很多其他調用,但如果它被攻破,這是唯一真正重要的調用。

我已經被告知,安全地做到這一點的唯一方法是在服務器端做到這一點,但我必須以某種方式告訴我的服務器,用戶剛買了premium,這意味着我需要一個端點API,這意味着它沒有完全在服務器上完成,所以當他們說這些時它們是什麼意思?

我保護我的溝通就像如下:

  1. 發送的用戶名/傳遞給服務器
  2. 鹽通,散,它存儲在數據庫
  3. 創建一個訪問令牌,將其存儲在用戶id分貝,返回令牌客戶
  4. 保存令牌喜好,API的所有調用必須有令牌附加

這也意味着日用戶可以從首選項中獲取令牌,然後根據需要調用我的API端點。也許我錯過了一些oauth過程的一部分,因爲我做了這個我的自我,但我錯過了什麼步驟?它只是覺得很容易逆向工程。

我能做些什麼來確保沒有其他人可以調用我的API?如果這是不可能的,我可以在我的流程中添加什麼以使其更安全?

+0

在所有的上面的東西上面,你也可以申請加密您的數據庫。這裏是鏈接: https:// guardianproject。info/code/sqlcipher/ –

回答

0

理想的和麪向未來的方式是有一個後端服務,用於每次用戶登錄時檢查用戶是否訂閱。

不推薦使用本地存儲,因爲用戶可能會切換手機(甚至從Android到iOS)。

一旦用戶完成購買,您應該向API發送請求,後端應與Google商家DB(或iOS商家)確認他是否實際購買了它。 如果是這樣,則必須在後端數據庫中輸入收據ID,操作系統類型(iOS或Android)和失效日期。 你只需要在後臺兩個端點:)

  1. purchaseDone( - 這與商戶數據庫檢查後登記在後端數據庫的操作系統類型。

  2. isSubscriptionActive() - true/false響應。 這應該檢查Google/iOS商家。您應該在用戶登錄時每次都調用此密碼(如果購買過期,請刪除本地數據庫中的記錄)。

爲您後端服務一些有用的鏈接: https://developers.google.com/android-publisher/api-ref/purchases/subscriptions

https://developers.google.com/android-publisher/api-ref/purchases/products

+0

當然,我會在每次登錄時檢查用戶是否被溺愛,以及我需要的所有其他信息。這無助於我擔心如果一個「黑客」獲得了可接受的權限,他可以接受它,並使用它來調用我的API。我的數據庫在雲中,所以沒有本地存儲,只有首選項(我必須在本地保存訪問令牌,或者用戶每次啓動我的應用程序時都必須登錄) –

+0

您是否有access_token的過期時間?(您應該)確保其有效時間不超過5分鐘(像亞馬遜這樣的後端服務通常不超過5分鐘)。一旦您的access_token失效,您應該使用ID和密碼(基本身份驗證)撤銷它。即使黑客獲得訪問令牌,API業務邏輯也應該檢查他是否已在Google商家服務器中完成實際購買,然後再在後端數據庫中輸入內容。黑客在其到期時間內更不可能獲取。爲了讓它更安全,使用SALT和Proguard混淆你的應用程序。 –

+0

酷,我想看看如何檢查用戶是否進行了購買 –