Twitter OAuth request_token: код ошибки 32, не удалось подтвердить подлинность - PullRequest
0 голосов
/ 23 октября 2019

Я пытаюсь аутентифицировать пользователя в Firebase через OAuth через Twitter в моем приложении Game Maker (Game Maker не поддерживает SDK).

Выполнение этого посредством запроса REST HTTP POST (согласно https://developer.twitter.com/en/docs/basics/authentication/api-reference/request_token), но ответ «Ошибка 32, не могу вас аутентифицировать».

Я установил свое приложение на Firebase и консоли разработчика Twitter и скопировал значения ключа / секретного кода API в консоль Firebase. Firebase дает мнеcallback_url, который я внес в белый список в приложении Twitter.

Я слежу за документацией API Twitter для 3-стороннего OAuth (это шаг 1, POST request_token) и проверил бесконечные другие ресурсы.

На подписи я дважды проверил с онлайн-кодировщиками, что моя кодировка HMAC-SHA1 правильная, и это так.

Это мой HTTP-запрос:

URL: https://api.twitter.com/oauth/request_token Метод: Заголовок POST:

Host : api.twitter.com,
Content-Type : application/x-www-form-urlencoded,
Authorization :

Oauth oauth_callback="https%3A%2F%2Fbitblock-blast.firebaseapp.com%2F__%2Fauth%2Fhandler", oauth_consumer_key="kEH9VascQh5rGdq6khl0oCfnL", oauth_nonce="p0B7y4w0P334qa633JzF370z89LK0N60", oauth_signature="MTIwMjc1Nzc1MTczODQ1OTUxMzQyMzgxMzIxNzYxODQxMjQyMzkyNTEyMDI3MTI0MjM1", oauth_signature_method="HMAC-SHA1", oauth_timestamp="1571857067", oauth_version="1.0"

Тело: ""

Подпись для заголовка была сгенерирована из этого словаря:

oauth_callback      : https://bitblock-blast.firebaseapp.com/__/auth/handler,
oauth_consumer_key  : [TWITTER API KEY],
oauth_nonce     : [NONCE],
oauth_signature_method  : "HMAC-SHA1",
oauth_timestamp"    : [TIMESTAMP],
oauth_version"      : "1.0"

(все значения заполненыпо соответствующим сценариям)

Вот как я создаю окончательную строку подписи:

var parameters = map_to_http_parameter_string(header); //Convert to "key=value, key=value" format
var signature_base = string_upper(method) + "&" + percent_encode(url) + "&" + percent_encode(parameters);
var signing_key = [TWITTER_API_SECRET] + "&";

var signature = base64_encode(string_hex_to_binary(hash_hmac(signature_base, signing_key)));

Вот пошаговая разбивка создания подписи:

*тысяча тридцать-один *

каскадных строка 'параметры': «oauth_callback = HTTPS% 3A% 2F% 2Fbitblock-blast.firebaseapp.com% 2F __% 2Fauth% 2Fhandler & oauth_consumer_key = [api_key] & oauth_nonce = 5sR6w60Hz2Uvk10EdW5135O79NuV3y7b & oauth_signature_method = HMAC-SHA1 & oauth_timestamp = 1571857990 & oauth_version =1,0 "(как вы можете видеть, они были упорядочены и кодированы в процентах)

Строка сцепленной базовой подписи:" POST & https% 3A% 2F% 2Fapi.twitter.com% 2Foauth% 2Frequest_token & oauth_callback% 3Dhttps% 253A% 252F% 252Fbitblock-blast.firebaseapp.com% 252F __% 252Fauth% 252Fhandler% 26oauth_consumer_key% 3D [api_key]% 26oauth_nonce% 3D5sR6w60Hz2Uvk10EdW5135O79NuV3y7b% 26oauth_signature_method% 3DHMAC-SHA1% 26oauth_timestamp% 3D1571857990% 26oauth_version% 3D1.0" * 1 038*

Ключ подписи "[TWITTER_API_SECRET] &" (секретный ключ доступа оставлен пустым)

Запустите HMAC-SHA1 (базовая подпись, ключ подписи), закодируйте в base64 (шестнадцатеричная часть необходима, поскольку HMAC-SHA1 в Game Maker генерирует шестнадцатеричную строку ASCII)

Наконец, я добавляю эту подпись к значению аутентификации заголовка и отправляю свой HTTP-запрос.

Ответ должен быть токеном OAuth, вместо этого я получаю ошибку 32, не могу вас подтвердить.

Я проверил все, чтобы увидеть, что я делаю неправильно, но не могу выяснить.

1 Ответ

0 голосов
/ 24 октября 2019

Хорошо, я обнаружил, что это глупая опечатка: я написал «Oauth oauth_callback ...» вместо «OAuth oauth_callback ...» в заголовке авторизации.

...