2012-09-11 48 views
3

故事:我正在製作一個Android應用程序,允許用戶購買訂閱,並且不需要用戶擁有帳戶或登錄。我想檢查用戶是否購買了訂閱,並且the Google Play Android Developer API seems to provide this service在這個簡單的Android應用案例中,我需要從OAuth 2.0中獲得什麼?

存在的問題(TL; DR):我應該使用OAuth爲 「web應用程序」, 「已安裝應用程序」 上述的 「服務應用程序」,或無?

問題:要開始使用此,有人告訴我:

訪問谷歌Play Android開發者API使用 OAuth 2.0網絡服務器流量認證。在您可以使用該API之前,您需要設置一個API控制檯項目,創建一個客戶端ID和 生成一個刷新令牌。 -source

不夠公平。有那麼繼續說安裝說明:

在第二頁上,選擇Web應用程序和設置重定向URI 和Javascript的起源。

我的應用程序訪問互聯網,但它是一個安裝Android應用程序,一個Web應用程序,所以我沒有「重定向URI」或「JavaScript源」鏈接它。此外,這將需要用戶登錄,這是我不想要的,在我的情況下不是必需的(我只想檢查用戶是否購買了訂閱)。

因此,如果不是「Web應用程序」,我嘗試創建一個「已安裝的應用程序(Android)」,這仍然需要用戶登錄才能管理用戶的資源。

我不想要這個。還有第三種替代稱爲「服務帳戶」,不需要用戶登錄:當你想要處理 「自己的」資源的服務

服務帳戶被使用(例如,一個應用程序管理計算 引擎資源的引擎應用),而不是外部用戶 的資源(例如,標準OAuth流)。使用服務帳戶,應用程序將 成爲資源的所有者......如果您使用服務帳戶,則只會獲取有關服務購買的數據。 -source

我不知道這是什麼,我想在我的情況下...

最後,也是此選項:

最簡單的流程是一個在沒有結束需要用戶授權。 您仍然需要使用API​​密鑰來識別您的客戶端應用程序。-source

這看起來很完美!不過,我最初被告知,要使用Google Play Android開發人員API,我需要使用OAuth 2.0進行身份驗證,而且這不會使用客戶ID,我最初被告知我特別需要。

回答

2

至少有2個問題與您正試圖在這裏實現什麼:

  1. 正如你將處理在你的Android應用程序的服務器響應,你就會有這樣的事情在你的代碼:

    if (isSubscriptionValid()) 
    

    有人可以與你的應用的APK他的設備上(這是很容易),篡改,簡單地更換與檢查:

    if (true) 
    

    攻擊者可以在沒有訂閱的情況下訪問您的內容。

  2. 由於對API的調用必須由您的開發者帳戶授權並且親自登錄到每個用戶設備上顯然是無法選擇的,您必須轉到服務帳戶,因爲您已經正確地找出了問題。

    然而這些都只是針對server-to-server interactions,否則它會要求你每個人的存儲設備上的私鑰和,因爲它是不可能安全地存儲在Android設備上的數據,你不會滿足這個要求:

    私鑰必須安全地存儲和管理。

Google recommends你有一個後端服務器做這樣的檢查。所以,你可以決定是否訂閱是有效的移交內容,客戶端和其他東西之前:

該API的設計是從後端服務器使用的安全管理訂閱,以及延伸的方式將訂閱與其他服務集成在一起。

如果您還沒有後端服務器可用做什麼,你必須依靠In-app Billing Notifications

相關問題