You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Strava API获取数据时缺失activity:read_permission权限问题求助

Strava API授权错误:缺失activity:read_permission权限

我跟着教程和配套代码调用Strava API时,能成功获取access token,但调用/athlete/activities接口时返回授权错误,错误信息如下:

{'message': 'Authorization Error',
'errors': [{'resource': 'AccessToken',
'field': 'activity:read_permission',
'code': 'missing'}]}

我怀疑问题和OAuth scope配置有关,但不知道如何调整,我的代码如下:

import requests
import urllib3
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)

auth_url = "https://www.strava.com/oauth/token"
activites_url = "https://www.strava.com/api/v3/athlete/activities"

payload = {
    'client_id': "XXXXXX",
    'client_secret': 'XXXXXX',
    'refresh_token': 'XXXXXXXXX',
    'grant_type': "refresh_token",
    'f': 'json'
}

print("Requesting Token...\n")
res = requests.post(auth_url, data=payload, verify=False)
access_token = res.json()['access_token']
print("Access Token = {}\n".format(access_token))

activities_url = f"https://www.strava.com/api/v3/athlete/activities?" \
          f"access_token={access_token}"
print('RESTful API:', activities_url)

# Get the response in json format
response = requests.get(activities_url)
activity = response.json()

问题原因

你的refresh token是在初始授权流程中获取的,当时请求的OAuth scope未包含activity:read(或activity:read_all)权限,导致通过refresh token刷新得到的access token也没有读取活动的权限。Strava的refresh token无法追加新权限,只能沿用初始授权时的scope。

解决步骤

  1. 重新发起授权流程,指定正确的scope
    构造包含scope=activity:read的授权URL(如果需要读取隐私设置为仅自己可见的活动,用activity:read_all),示例结构:

    https://www.strava.com/oauth/authorize?client_id=你的客户端ID&response_type=code&redirect_uri=你的回调地址&scope=activity:read
    

    确保回调地址和你Strava应用后台配置的一致。

  2. 获取新的授权码(code)
    打开上述URL,登录你的Strava账号并授权,授权完成后会跳转到回调地址,URL参数中会包含code值,复制该值。

  3. 换取新的refresh token和access token
    修改代码中的payload,用authorization_code模式换取token:

    payload = {
        'client_id': "你的客户端ID",
        'client_secret': '你的客户端密钥',
        'code': '刚刚获取的授权码',
        'grant_type': "authorization_code",
        'f': 'json'
    }
    

    发送POST请求获取新的token,其中会包含新的refresh_token。

  4. 更新代码中的refresh token
    将代码中原有的refresh_token替换为新获取的,重新运行代码即可正常调用活动接口。

内容的提问来源于stack exchange,提问作者Whooper

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 05:00:53