2016-03-04 2 views
7

Я получил API REST API для определенной службы как часть бета-версии. Мне сказали, что авторизация прошла через OAuth2.Использование OAuth2 с именем пользователя и паролем

я получил следующее:

  1. ID
  2. SECRET
  3. САЙТА

Я также получил образец кода в Ruby:

client = OAuth2::Client.new(key, secret, :site => site) 
token = client.password.get_token('[email protected]', 'your_password') 
access_token = OAuth2::AccessToken.new(client, token) 
JSON.parse access_token.get("/v1/users/me").body rescue {} 

Пытаюсь для реализации этого же фрагмента в python с помощью oauth2 пакета, без успеха:

consumer = oauth2.Consumer(key=self._client_id, 
          secret=self._client_secret) 
request_token_url = "api.theservice.com/" 
token = oauth2.Token(key=self._email, secret=self._password) 
client = oauth2.Client(consumer, token) 
resp, content = client.request(request_token_url, "GET") 
pprint.pprint(resp) 
pprint.pprint(content) 
resp, content = client.request(request_token_url + 'v1/users/me', "GET") 
pprint.pprint(resp) 
pprint.pprint(content) 

Второго ответ содержит следующее:

'www-authenticate': 'Bearer realm="Doorkeeper", error="invalid_token", ' 
        'error_description="The access token is invalid"', 

Я также попытался создать oauth2.Client объект без маркеров, и проверил первый ответ в течение access_token, но ничего сорт прошел.

Каков правильный способ аутентификации здесь?

+0

ли эта услуга с использованием трех ножках OAuth, как Twitter описано [здесь] (https://github.com/joestump/питон-oauth2/вики/Twitter-Три ноги-OAuth)? – skyline75489

+0

Насколько мне известно. –

ответ

0

Насколько я вижу, ни oauth2, ни запросы-oauth2 не поддерживают стратегию имени пользователя и пароля. Поэтому вам нужно получить токен доступа самостоятельно.

Проверьте API документацию для деталей, но в целом это должно быть что-то вроде этого:

r = requests.post('http://api.theservice.com/auth', 
        data = {'email':email, 'password': password}).json() 

token = oauth2.Token(key=r['key'], secret=r['secret']) 
consumer = oauth2.Consumer(key=self._client_id, 
          secret=self._client_secret) 

client = oauth2.Client(consumer, token)