Реализация OAuth на Python Dropbox API - PullRequest
1 голос
/ 30 мая 2019

Я пытаюсь добавить пользователя в список разработчиков моего приложения Dropbox. Для этого мне кажется, что мне нужно подключиться к конечным точкам /token/from_oauth1 или / и /oauth2/token, чтобы сгенерировать их токен доступа. Я новичок в использовании API и пытаюсь понять, как внедрить OAuth / OAuth2 в мой код. Я использую библиотеку requests, сделайте так.

Вот пример того, что я пробовал, но у меня не получилось:

import requests
import json

url = "https://api.dropboxapi.com/2/auth/token/from_oauth1"

headers = {
    "Authorization": "Basic <APP_KEY>:<APP_SECRET>",
    "Content-Type": "application/json"
}

data = {
    "oauth1_token": "<DROPBOX_USERNAME>",
    "oauth1_token_secret": "<DROPBOX_PASSWORD>"
}

r = requests.post(url, headers=headers, data=json.dumps(data))

Но я получаю ошибку b'Error in call to API function "auth/token/from_oauth1": Invalid value in HTTP header "Authorization": "Basic <APP_KEY>:<APP_SECRET>"'

APP_KEY и APP_SECRET явно заменены соответствующими им строками.

Прав ли я звонить /token/from_oauth1, а не /oauth2/token. Если да, то где я не так с этим запросом?

1 Ответ

2 голосов
/ 30 мая 2019

Если вы начинаете новую интеграцию с API Dropbox, вы не должны использовать / 2 / auth / token / from_oauth1 .Это только для использования с существующими токенами доступа OAuth 1, которые вы получили бы только от старой интеграции с Dropbox API v1, которая теперь устарела.

Если вы начинаете сейчас, вы просто будете использоватьDropbox API v2 только с токенами доступа OAuth 2.

Чтобы реализовать поток авторизации приложения OAuth для получения токенов доступа OAuth 2 для использования с Dropbox API v2, необходимо использовать следующее:

Я также рекомендую просмотреть Руководство по OAuth .

В любом случае, вы никогда не должны напрямую обрабатывать имя пользователя и пароль Dropbox напрямую.

Кроме того, поскольку выя использую Python, я настоятельно рекомендую использовать официальный Dropbox API v2 Python SDK , поскольку он сделает большую часть работы за вас.У него есть помощники для обработки потока OAuth, такие как DropboxOAuth2Flow и DropboxOAuth2FlowNoRedirect.

Вот минимальный пример обработки «кода» Dropbox OAuth 2использовать только requests:

import requests

app_key = "APP_KEY_HERE"
app_secret = "APP_SECRET_HERE"

# build the authorization URL:
authorization_url = "https://www.dropbox.com/oauth2/authorize?client_id=%s&response_type=code" % app_key

# send the user to the authorization URL:
print 'Go to the following URL and allow access:'
print(authorization_url)

# get the authorization code from the user:
authorization_code = raw_input('Enter the code:\n')

# exchange the authorization code for an access token:
token_url = "https://api.dropboxapi.com/oauth2/token"
params = {
    "code": authorization_code,
    "grant_type": "authorization_code",
    "client_id": app_key,
    "client_secret": app_secret
}
r = requests.post(token_url, data=params)
print(r.text)
...