Неверный запрос: неверная подпись при попытке сделать OAuth 1.0 для интеграции OpenX - PullRequest
0 голосов
/ 19 июня 2019

Я пытаюсь интегрировать OpenX в свое приложение, и первым шагом для получения защищенных данных является проверка подлинности OAuth 1.0. Однако я застрял при подписании запроса и продолжаю получать сообщение об ошибке «Недопустимый запрос: неверная подпись от Почтальона». Как я это проверил, я вручную сгенерировал подпись и заголовок запроса, а затем вставил заголовок запроса и некоторые другие параметры в Postman для тестирования. У меня есть подпись в заголовке авторизации, и я не знаю, почему она постоянно говорит мне неправильную подпись Вот мой код.

Вот ссылка на документ OpenX: https://docs.openx.com/Content/developers/platform_api/api_auth_programmatic_sample.html

Мой текущий заголовок авторизации выглядит так:

OAuth realm="teachingaids",oauth_nonce="1243510944",oauth_timestamp="1560953361",oauth_consumer_key="d6ed96f15380b90b6d21e97642cf7953aa65ce33",oauth_signature_method="HMAC-SHA1",oauth_version="1.0",oauth_signature="ZXeYGjXZnyQ4R1FXwmijehdwvkI%3D",oauth_callback="oob"

Вот код для получения токена несанкционированного запроса:

protected function get_request_token()
    {
        $nonce = mt_rand();
        $timestamp = time();
        $signature = rawurlencode($this->generate_signature($nonce, $timestamp));

        $ch = curl_init($this->api_url . '/api/index/initiate');

        $header = array();
        $header[] = 'Authorization: OAuth realm="' . $this->oauth_realm . '",oauth_nonce="' . $nonce . '",oauth_timestamp="' . $timestamp . 
                    '",oauth_consumer_key="' . $this->consumer_key . '",oauth_signature_method="HMAC-SHA1",oauth_version="1.0",' . 
                    'oauth_signature="' . $signature . '",oauth_callback="oob"';
        print $header[0];
        $header[] = 'Content-Type: application/x-www-form-urlencoded';
        $header[] = 'Accept-Encoding: identity';
        $header[] = 'Connection: close';
        $header[] = 'User-Agent: Python-urllib/2.7';

        curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
        curl_setopt($ch, CURLOPT_POST, true);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_VERBOSE, false);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

        $json_string = curl_exec($ch);
    }

А вот код для получения Nonce

protected function getNonce($length = 7)
    {
        $characters = '0123456789';
        $charactersLength = strlen($characters);
        $nonce = '';
        for ($i = 0; $i < $length; $i++) {
            $nonce .= $characters[rand(0, $charactersLength - 1)];
        }
        return $nonce;
    }

А вот код для генерации подписи

protected function generate_signature($nonce, $timestamp)
    {
        $signature_method = 'HMAC-SHA1';
        $version = '1.0';

        $base = 'POST&' . rawurlencode('http://sso.openx.com/api/index/initiate&') .
                rawurlencode('oauth_consumer_key=' . rawurlencode($this->consumer_key) . 
                '&oauth_nonce=' . rawurlencode($nonce) .
                '&oauth_signature_method=' . rawurlencode($signature_method) . 
                '&oauth_timestamp=' . rawurlencode($timestamp) . 
                '&oauth_token=' . rawurlencode('') . 
                '&oauth_version=' . rawurlencode($version));

        $key = rawurlencode($this->consumer_secret) . '&';

        $signature = base64_encode(hash_hmac('sha1', $base, $key, true));

        return $signature;
    }

Пожалуйста, любая помощь будет оценена.

Я ожидаю ответ с токеном от первого шага OAuth 1.0

...