Python Social Auth Twitter 403, а затем 220 - PullRequest
0 голосов
/ 22 февраля 2019

Я пытаюсь авторизоваться с Android с помощью Python social, я передаю свой токен в формате: "xxxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" Установите backend = "twitter" и "grant_type": "convert_token"

То же самоечто я делаю для Facebook и работает.

Я получил правильные настройки

SOCIAL_AUTH_TWITTER_KEY = os.environ.get('SOCIAL_AUTH_TWITTER_KEY', '')
SOCIAL_AUTH_TWITTER_SECRET = os.environ.get('SOCIAL_AUTH_TWITTER_SECRET', '')

, но всякий раз, когда он попадает в класс бэкэнда Twitter в методе: user_data, то есть вызывая конечную точку API Twitters verify_credentials.json.

происходит сбой с ответом 400, за которым следует:

{
  "error": "invalid_request",
  "error_description": "Backend responded with HTTP403: {\"errors\":[{\"message\":\"Your credentials do not allow access to this resource\",\"code\":220}]}."
}

Я пытался воссоздать вещи вручную, но происходит то же самое.

Мне известно о API Twitter 31 октябряизменения, и я добавил URL-адреса обратного вызова в панели разработчиков Twitter, как для приложений, так и для серверов live / development.

twittersdk://
http://127.0.0.1:8000/auth/complete/twitter/

Я изменил разрешения на чтение и запись на всякий случай, но не использовал

Access permission
Read, write, and direct messages
Additional permissions
Request email address

Кроме того, я уже дважды обновил ключ и секрет и аккуратно разместил их на бэкенде и Android.

До 2018.10.31-гоЭта же настройка работала, но внезапно ничего не работает.

С Android я звоню:

TwitterCore.getInstance().getSessionManager().getActiveSession
                ().getAuthToken().token;

, чтобы получить токен.

Токен извлекаетсяAndroid использует https://api.twitter.com/1.1/account/verify_credentials.json

Обновления

Я тестировал вручную с помощью twurl (ruby app)

twurl authorize -u 'myuser@gmail.com' -p 'mypassword' -c 'xxxxxxxxxxxxxxxxxxxxxxxxx' -s 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' -a

, затем в ~ /.twurlrc есть access_token (точно так же, как проходит Android).

Однако для запроса GET verify_credentials.json необходим token_secret, а также отладка, свойство, которое я не передаю для convert_token из Android

Изображение, показывающее успех:

Insomnia test reqyest

Вопрос: нужно ли расширять бэкэнд Twitter и передавать параметр token_secret и как?

1 Ответ

0 голосов
/ 23 февраля 2019

РЕШЕНИЕ

https://github.com/RealmTeam/django-rest-framework-social-oauth2/issues/15 Здесь говорится, что мне нужно передать oauth_token_secret

 curl -X POST -d "grant_type=convert_token&client_id=<client_id>&backend=twitter&token=oauth_token=<token>%26oauth_token_secret=<secret_token>" http://localhost:8000/auth/api/convert-token

Отправка в виде приложения / x-www-form-urlencoded в запросе работает так, как нужно для приложения Android.

...