Декодировать токен целостности с помощью Google PlayIntegrity API

Я пытаюсь внедрить PlayIntegrity API в свое приложение для Android, но не знаю, как расшифровать и проверить токен с помощью серверов Google.

Я следил за документация до этого момента:

Декодировать токен целостности с помощью Google PlayIntegrity API

И теперь я застрял на отправке запроса на декодирование googleapis. Я не понимаю, как работает эта инструкция.

Я создаю учетную запись службы, загружаю файл учетных данных json и помещаю его в свой проект laravel, затем я попробовал этот фрагмент кода:

$client = new Client();
$client->setAuthConfig(storage_path('app/integrity_check_account.json'));
$client->addScope(PlayIntegrity::class);
$httpClient = $client->authorize();

$result = $httpClient->request('POST', 'https://playintegrity.googleapis.com/v1/my.package.name', [
    'headers' => ['Content-Type' => 'application/json'],
    'body' => "{ 'integrity_token': 'token' }"
]);

dd($result);

Итак, у меня две проблемы с этим кодом:

  1. Правильно ли я добавляю область действия?
  2. Я правильно делаю запрос? Потому что он не работает, так как я получаю ошибку 404.

Заранее спасибо.

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
0
0
107
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Наконец-то я нашел решение своей проблемы, просматривая источник PlayIntegrity API из Клиентская библиотека API Google для PHP.

После импорта необходимых зависимостей:

composer require google/apiclient:^2.12.1

Это мой контроллер:

<?php

namespace App\Http\Controllers;

use Google\Client;
use Google\Service\PlayIntegrity;
use Google\Service\PlayIntegrity\DecodeIntegrityTokenRequest;
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
use Illuminate\Foundation\Bus\DispatchesJobs;
use Illuminate\Foundation\Validation\ValidatesRequests;
use Illuminate\Http\Request;
use Illuminate\Routing\Controller as BaseController;

class Controller extends BaseController {
    use AuthorizesRequests, DispatchesJobs, ValidatesRequests;

    public function performCheck(Request $request) {
        $client = new Client();
        $client->setAuthConfig(path/to/your/credentials/json/file.json);
        $client->addScope(PlayIntegrity::PLAYINTEGRITY);
        $service = new PlayIntegrity($client);
        $tokenRequest = new DecodeIntegrityTokenRequest();
        $tokenRequest->setIntegrityToken("TOKEN_HERE");
        $result = $service->v1->decodeIntegrityToken('PACKGE_NAME_HERE', $tokenRequest);
        //check result logic here
    }
}

вам удалось заставить это работать? Я борюсь с запросом decodeIntegrityToken - не та же ошибка, которую вы получили, а 400 BAD REQUEST со статусом INVALID_ARGUMENT. Вы сталкивались с этим во время отладки? Мое тело содержит «integrity_token» со значением, которое я получил от потока на стороне клиента. Спасибо

catastrophic error 22.03.2022 22:15

Да, у меня это работает нормально. INVALID_ARGUMENT может возникнуть, если вы забудете указать свой токен или имя пакета. Это также произойдет, если ваш токен плохо отформатирован. Также одноразовый номер должен быть закодирован в base64 с NO_PADDING, NO_WRAPPING и URL_SAFE.

hiddeneyes02 22.03.2022 22:26

Спасибо за этот пост, я нашел его очень полезным.

Несмотря на это, у меня все еще были некоторые проблемы с расшифровкой вердикта. Вот две проблемы, с которыми я столкнулся, и я не был уверен, была ли проблема связана с тем, как я вызывал Play Integrity API на устройстве, или с тем, как я расшифровывал токен ответа.

Если при декодировании токена вердикта вы получите исключение с кодом ошибки 400/Запрос содержит недопустимый аргумент, вам, вероятно, потребуется установить номер облачного проекта с помощью IntegrityTokenRequest_setCloudProjectNumber() (C++).

Если вы получили исключение при декодировании токена с кодом ошибки 403/У вызывающего абонента нет разрешения, еще раз проверьте, правильно ли вы указали номер проекта Google Cloud.

Другие вопросы по теме