Я пытаюсь аутентифицировать пользователя в 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, не могу вас подтвердить.
Я проверил все, чтобы увидеть, что я делаю неправильно, но не могу выяснить.