簡體   English   中英

Android AppEngine端點驗證和InApp計費

[英]Android AppEngine Endpoints Auth and InApp Billing

我遇到了一個棘手的問題。

我正在使用Appengine端點來實現我的服務器端API。 此API將一些數據返回給我的用戶。 應用程序支持應用程序產品購買 我的想法很簡單:只要用戶購買某個產品API,就會返回其他數據。 直接的方法是將標志作為參數傳遞給API。 但我想通過對我的終端啟用OAuth身份驗證來使其更安全。 因此,只要用戶購買了某些內容,就會在服務器上進行驗證和記憶。 因此,我的API端點將始終知道要返回給特定用戶的數據。

然而問題是以下。 除非他們想要購買,否則我不想強制用戶進行身份驗證。 但是有一種情況是用戶可能會使用其他設備,而不是通過我的應用程序使用他們的谷歌帳戶登錄。 這樣我的API將只返回免費數據,但用戶已經支付了購買的產品。 我可以通過播放服務查詢購買的產品,但我仍需要在我的服務器上進行身份驗證或傳遞標志以獲取完整數據。

這些事情通常如何完成? 我是否可以默默使用用戶的第一個Google帳戶(保證在Play商店中使用)以在我的服務器上進行身份驗證,或者這是錯誤的?

謝謝。

您應該將OAuth 2.0用於您提到的內容。

您可以使用第一個允許在服務端進行身份驗證的Google帳戶。 OAuth 2.0是一個很棒的工具,可以簡化並讓開發人員輕松地允許用戶訪問您的應用程序,可能是游戲或交易平台 初始化后,OAuthHmacSigner對象將為您管理身份驗證:

signer = new OAuthHmacSigner();
signer.clientSharedSecret = Constants.CONSUMER_SECRET;

然后Android活動使用以下代碼啟動OAuth流程:

launchOauth.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
        startActivity(new Intent().setClass(v.getContext(),
                PrepareRequestTokenActivity.class));
    }
});

要為您的應用程序實現它,您可以使用Java集成OAuth 2.0 Google OpenID ,但您也可以選擇使用Python或Ruby。 它提供了幾種提高安全性的工具,使構建防偽狀態令牌也變得容易:

String state = new BigInteger(130, new SecureRandom()).toString(32);
request.session().attribute("state", state);
return new Scanner(new File("index.html"), "UTF-8")
  .useDelimiter("\\A").next()
  .replaceAll("[{]{2}\\s*CLIENT_ID\\s*[}]{2}", CLIENT_ID)
  .replaceAll("[{]{2}\\s*STATE\\s*[}]{2}", state)
  .replaceAll("[{]{2}\\s*APPLICATION_NAME\\s*[}]{2}",
              APPLICATION_NAME);

要獲得OAuth 2.0訪問令牌,您只需調用:

AccountManager.getAuthToken() 

使用oauth2的authTokenType請求令牌。 然后,您可以像往常一樣將其集成到服務器端托管的后端。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM