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。
解决步骤
重新发起授权流程,指定正确的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应用后台配置的一致。
获取新的授权码(code)
打开上述URL,登录你的Strava账号并授权,授权完成后会跳转到回调地址,URL参数中会包含code值,复制该值。换取新的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。更新代码中的refresh token
将代码中原有的refresh_token替换为新获取的,重新运行代码即可正常调用活动接口。
内容的提问来源于stack exchange,提问作者Whooper

