oauth1.0 с именем пользователя и паролем в Python - PullRequest
0 голосов
/ 30 марта 2019

Я пытаюсь интегрировать API qwikcilver в мой проект.Они используют oauth1.0 для аутентификации.Я использую reports-oauthlib python lib для oauth1.0.
Вот мой код для аутентификации.

# Using OAuth1Session
oauth = OAuth1Session(client_key, client_secret=client_secret)
fetch_response = oauth.fetch_request_token(request_token_url)
{
    "oauth_token": "Z6eEdO8MOmk394WozF5oKyuAv855l4Mlqo7hhlSLik",
    "oauth_token_secret": "Kd75W4OQfb2oJTV0vzGzeXftVAwgMnEK9MumzYcM"
}
resource_owner_key = fetch_response.get('oauth_token')
resource_owner_secret = fetch_response.get('oauth_token_secret')

Мой запрос выглядит следующим образом:
qwikcilver имеет имя пользователяи пароль.Я пытался много, чтобы отправить имя пользователя и пароль в коде, но не работает.

Как передать имя пользователя и пароль в функцию request-oauthlib?

1 Ответ

0 голосов
/ 25 мая 2019

Проверьте с помощью qwikcilver (что бы это ни было), есть ли у них возможность генерировать токен и авторизоваться.Если это так, вы можете использовать токен как часть заголовка и вызывать API.Если этого нет, проверьте, разрешают ли они двухсторонние звонки.Однако такие службы обычно не разрешают двухсторонние вызовы для обычных пользователей.

Для трехсторонних вызовов вам может потребоваться браузер для завершения авторизации.

В вашем коде вы вызвалиЗапросите токен, и вы пытаетесь использовать его для получения доступа к сервису.Который не будет работать.Запрос токена - это всего лишь предварительный токен, который необходимо авторизовать.Маркеры запроса не могут использоваться для таких вызовов API.Она не будет работать.После авторизации вам нужно будет вызвать Access Token API, чтобы получить ваш фактический токен, который можно использовать для получения доступа к сервисам, на которые вы авторизованы.

Короче говоря, это процесс

1) Токен запроса >> 2) Авторизация >> 3) Токен доступа

Это поток.Пример в Python

oauth1Session = OAuth1Session(clientKey, clientSecret)

def requestToken(self):
    requestTokenResponse = oauth1Session.fetch_request_token(oauth1RequestTokenUrl, realm)

    token = requestTokenResponse.get('oauth_token')
    secret = requestTokenResponse.get('oauth_token_secret')

    return (token, secret)

def authorize(self, token):
    authUrl = oauth1Session.authorization_url(oauth1AuthorizeUrl, token)
    print (authUrl)

    #########
    # THIS IS WHERE YOU NEED THE BROWSER. 
    # You visit authUrl and login with your Username and Password. 
    # This will complete Authorization

    return authUrl

def accessToken(self):
    accessTokenResponse = oauth1Session.fetch_access_token(oauth1AccessTokenUrl)

    print (accessTokenResponse) 

    #########
    #accessTokenResponse contains your actual token
    #

Для части браузера - вы можете попробовать привязки Chromium для Python (мало кто пробовал это раньше - например, этот https://github.com/cztomczak/cefpython). Есть и другие варианты, такие какиспользуя установленный по умолчанию браузер и т. п. Выберите все, что вам подходит.

Как только вы это установите - вы можете программно посетить URL (authUrl) и авторизоваться (войти в систему, затем «разрешить») -вы можете быть перенаправлены на обратный вызов (который вы указали в случае OAuth1) со строкой запроса «code». Это код авторизации.

Получив код авторизации, вы можете закрыть окно браузера ивызвать вызов Get Access Token (fetch_access_token).

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...