Подтвердить что ты не робот

Конечные точки Android AppEngine Auth и InApp Billing

У меня возникла сложная проблема.

Я использую Appengine Endpoints для реализации моего API-интерфейса на стороне сервера. Этот API возвращает некоторые данные моим пользователям. Приложение поддерживает покупки приложений. Моя идея проста: как только пользователь купит определенный API-интерфейс продукта, он вернет дополнительные данные. Прямой подход - передать флаг в качестве параметра API. Но я хочу сделать его более безопасным, включив аутентификацию OAuth моим конечным точкам. Поэтому, как только пользователь покупает что-то, он проверяется и запоминается на сервере. Таким образом, моя конечная точка API всегда будет знать, какие данные будут возвращены конкретному пользователю.

Однако проблема следующая. Я не хочу принуждать пользователей к аутентификации, если они не хотят совершить покупку. Но тогда возникает ситуация, когда пользователи могут использовать другое устройство, а не войти, используя свою учетную запись google через мое приложение. Таким образом, мой API вернет только бесплатные данные, но пользователь заплатил купленные продукты. Я могу запросить купленные продукты через игровые сервисы, но мне все равно нужно либо auth на моем сервере, либо передать флаг для получения полных данных.

Как это обычно делается? Могу ли я бесшумно использовать первую учетную запись пользователя Google (которая, как гарантируется, используется в Play Маркете) для авторизации на моем сервере или это неправильно?

Спасибо.

4b9b3361

Ответ 1

Вы должны использовать 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));
    }
});

Чтобы реализовать его для своего приложения, вы можете интегрировать OAuth 2.0 Google OpenID с помощью Java, но вы также можете использовать 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() 

Что запрашивает токен, используя authTokenType oauth2. Затем вы можете как обычно интегрировать его в свой серверный сервер, размещенный на вашей стороне сервера.