Как зарегистрировать конечную точку с помощью Google RIS C API в php - PullRequest
0 голосов
/ 22 апреля 2020

Я читаю и пытаюсь реализовать то, что указано в документации по Защита учетных записей пользователей с помощью Cross-Account Protection

Что я сделал, как показано ниже:

        JWT::$leeway = 60;

        $key = file_get_contents('location.json');

        $time = time();

        $payload = [
            "iss" => "account email",
            "sub" => "account email",
            "aud" => "https://risc.googleapis.com/google.identity.risc.v1beta.RiscManagementService",
            "iat" => $time,
            "exp" => $time + 3600,
        ];

        /**
         * IMPORTANT:
         * You must specify supported algorithms for your application. See
         * https://tools.ietf.org/html/draft-ietf-jose-json-web-algorithms-40
         * for a list of spec-compliant algorithms.
         */
        $jwt = JWT::encode($payload, $key);
        $decoded = JWT::decode($jwt, $key, ['HS256']);

        print_r($jwt);
        print_r($decoded);

        $client = new Client();

        try {
            $request = $client->post('https://risc.googleapis.com/v1beta/stream:update', [
                'headers' => [
                    'Authorization' => 'Bearer ' . $jwt,
                    'Accept' => 'application/json',
                ],
                'form_params' => [
                    'delivery' => [
                        'delivery_method' => 'https://schemas.openid.net/secevent/risc/delivery-method/push',
                        'url' => 'https://test.myapp.com/webhooks/google',
                    ],
                    'events_requested' => [
                        'https://schemas.openid.net/secevent/oauth/event-type/tokens-revoked',
                    ],
                ],
            ]);

            $response = $request->getBody();

            dd($response);
        } catch (ClientException $exception) {
            dd($exception->getResponse()->getBody()->getContents());
        }

Проблемы, с которыми я сталкиваюсь:

  • Я плохо понимаю, как использовать JWT из того, что я прочитал в документации, что я делаю неправильно в своей реализации?
  • Примеры приведены в JAVA, но мне нужно это в php, и я попытался прочитать код JAVA, но не понимаю, откуда происходят некоторые вещи.
  • Из-за того, что я прочитал, я полагаю, я не смогу проверить эти события в локальной среде? То есть точки этих событий должны быть запущены на местном? Или такие сервисы, как ultrahook, позволят это сделать? В противном случае мне пришлось бы тестировать конечную точку прямо на сервере.

Ошибка, которую я получаю из приведенного выше кода: Request had invalid authentication credentials. Expected OAuth 2 access token, login cookie or other valid authentication credential. See https://developers.google.com/identity/sign-in/web/devconsole-project.

Попытка предложенной ниже кодировки RS256 дает мне ошибка UnexpectedValueException: Algorithm not allowed Мне кажется, мне не хватает необходимых знаний о JWT и что-то не так.

1 Ответ

0 голосов
/ 22 апреля 2020

Я также смотрю, как сделать эту защиту кросс-аккаунта по этой ссылке https://developers.google.com/identity/protocols/risc#java_1 Я полагаю, вы говорите об этой части (Создать токен авторизации) https://developers.google.com/identity/protocols/risc#auth_token

Я использую php, но, глядя на код java на странице, он использует RS256 вместо HS256 в вашем коде. Если вы используете php, вы можете попробовать firebase php, и у них есть простой класс JWT, который вы можете использовать. https://github.com/firebase/php-jwt Вы можете просто использовать пример и заменить полезную нагрузку своей, а затем изменить на RS256. Это то, что я попытаюсь, я могу сообщить вам, если это сработает после.

...