如何获取和使用 Dropbox API 的刷新令牌 (Python 3.x)

Tim*_*imi 12 python dropbox access-token python-3.x dropbox-api

正如标题所示,我正在尝试生成刷新令牌,然后我想使用刷新令牌来获取短暂的访问令牌。

但有一个问题,因为我不够聪明,无法理解dropbox 网站上的文档,而且我发现的所有其他信息对我不起作用(ABC)或者是某种语言我不明白。

我已经尝试了github 页面中的所有三个示例,以及该网站上其他问题的用户代码。

我没有什么事情要做。

我得到的最多的是

错误:400 客户端错误:URL 请求错误:api.dropboxapi.com/oauth2/token

dropbox.rest.RESTSocketError:连接到“api.dropbox.com”时出错:[SSL:CERTIFICATE_VERIFY_FAILED]证书验证失败:无法获取本地颁发者证书(_ssl.c:1123)

:(

Spa*_*row 33

我是这样做的。我会尽量保持简单和精确

将以下授权 URL 中的 <APP_KEY> 替换为您的 Dropbox 应用密钥

https://www.dropbox.com/oauth2/authorize?client_id= <APP_KEY>&token_access_type=offline&response_type=code

完成授权 URL 上的代码流。最后您将收到AUTHORIZATION_CODE 。

转到Postman并使用以下配置创建一个新的 POST 请求

钥匙 价值
代码 <授权代码>
授予类型 授权码

发送请求后,您将收到包含刷新令牌的 JSON 负载。

{
    "access_token": "sl.****************",
    "token_type": "bearer",
    "expires_in": 14400,
    "refresh_token": "*********************",
    "scope": <SCOPES>,
    "uid": "**********",
    "account_id": "***********************"
}
Run Code Online (Sandbox Code Playgroud)

在你的Python应用程序中,

import dropbox

dbx = dropbox.Dropbox(
            app_key = <APP_KEY>,
            app_secret = <APP_SECRET>,
            oauth2_refresh_token = <REFRESH_TOKEN>
        )
Run Code Online (Sandbox Code Playgroud)

希望这也适合你!

  • 不,您不需要再次重复这些步骤。刷新令牌在您撤销之前不会过期。阅读[此](https://www.dropboxforum.com/t5/Dropbox-API-Support-Feedback/Oauth2-refresh-token-question-what-happens-when-the-refresh/td-p/486241)有趣来自 dropbox 论坛的帖子 (2认同)

chj*_*jch 13

上面的所有方法都有效,只是想发布一个纯Python解决方案,它本身引用了上面的答案。

  1. 应用程序控制台找到应用程序密钥应用程序秘密
  2. 运行以下代码片段(替换APP_KEY为上一步获取的值)并在浏览器中完成该过程以获取Access Code generated
import webbrowser

APP_KEY = '<APP_KEY>'
url = f'https://www.dropbox.com/oauth2/authorize?client_id={APP_KEY}&' \
      f'response_type=code&token_access_type=offline'

webbrowser.open(url)
Run Code Online (Sandbox Code Playgroud)
  1. 将所有APP_KEYAPP_SECRET、 和替换ACCESS_CODE_GENERATED为以下代码片段中的实际值。运行片段。
import base64
import requests
import json

APP_KEY = '<APP_KEY>'
APP_SECRET = '<APP_SECRET>'
ACCESS_CODE_GENERATED = '<ACCESS_CODE_GENERATED>'

BASIC_AUTH = base64.b64encode(f'{APP_KEY}:{APP_SECRET}'.encode())

headers = {
    'Authorization': f"Basic {BASIC_AUTH}",
    'Content-Type': 'application/x-www-form-urlencoded',
}

data = f'code={ACCESS_CODE_GENERATED}&grant_type=authorization_code'

response = requests.post('https://api.dropboxapi.com/oauth2/token',
                         data=data,
                         auth=(APP_KEY, APP_SECRET))
print(json.dumps(json.loads(response.text), indent=2))
Run Code Online (Sandbox Code Playgroud)


ore*_*bac 11

前面的答案很有效,但如果您需要快速运行一些东西,您可以使用以下代码片段:

#/bin/bash
echo -n "Enter APP_KEY" 
read APP_KEY

echo -n "Enter APP_SECRET" 
read APP_SECRET
BASIC_AUTH=$(echo -n $APP_KEY:$APP_SECRET | base64)

echo "Navigate to URL and get ACCESS CODE"
echo "https://www.dropbox.com/oauth2/authorize?client_id=$APP_KEY&token_access_type=offline&response_type=code"

echo -n "Return to this script once you have the ACCESS_CODE" 
read DUMMY

echo -n "Enter the ACCESS_CODE" 
read ACCESS_CODE_GENERATED

curl --location --request POST 'https://api.dropboxapi.com/oauth2/token' \
--header "Authorization: Basic $BASIC_AUTH" \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode "code=$ACCESS_CODE_GENERATED" \
--data-urlencode 'grant_type=authorization_code'
Run Code Online (Sandbox Code Playgroud)