【问题标题】:Problem with access token in Strava API v3 GET all athlete activitiesStrava API v3 获取所有运动员活动中的访问令牌问题
【发布时间】:2019-03-23 15:23:41
【问题描述】:

我无法从 Strava 的 api 文档中的 url 访问所有运动员活动(我自己的)。

我能够获得自己的年初至今统计数据:

https://www.strava.com/api/v3/athletes/XXXXXXXX/stats?access_token=ACCESSTOKEN

我可以获取我的个人资料信息:

https://www.strava.com/api/v3/athlete?access_token=ACCESSTOKEN

但是当我尝试获取所有活动时:

https://www.strava.com/api/v3/athlete/activities?access_token=ACCESSTOKEN

我收到以下错误:

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

我需要在 url 中的某处包含我的客户端 ID 或密钥吗?我已登录,所以不明白为什么我无法访问自己的信息。请指教????

【问题讨论】:

标签: javascript node.js ajax strava


【解决方案1】:

2018 年 10 月 15 日,Strava 增强了 authorization 流程,引入了新的 scopes 列表。

您是否正在使用在 https://www.strava.com/settings/api 上找到的访问令牌?

这个令牌有 scope:read 可能不足以做你想做的事(即你的活动是公开的还是私人的?)。

如果您需要具有不同范围的新令牌,您必须遵循这些steps

第 1 步:将用户重定向到 Strava 的授权页面:

https://www.strava.com/oauth/authorize?
    client_id=YOUR_CLIENT_ID&
    redirect_uri=YOUR_CALLBACK_DOMAIN&
    response_type=code&
    scope=YOUR_SCOPE

第 2 步:从响应中读取 code 参数:

http://YOUR_CALLBACK_DOMAIN/?
    state=&
    code=AUTHORIZATION_CODE_FROM_STRAVA&
    scope=YOUR_SCOPE

第 3 步:使用包含授权码的 POST 请求新的访问令牌;您会在 JSON 响应中找到新的 access_token

https://www.strava.com/oauth/token?
    client_id=YOUR_CLIENT_ID&
    client_secret=YOUR_CLIENT_SECRET&
    code=AUTHORIZATION_CODE_FROM_STRAVA&
    grant_type=authorization_code

您可以在application page 中找到客户端 ID、客户端密码和回调域。

您可以在此documentation 中找到新范围的列表。

如果您是唯一使用您的应用程序的人,您可以使用浏览器手动执行前两个步骤,并将http://localhost 作为回调域。

【讨论】:

  • 谢谢 tezzo!我会更多地解决这个问题,可能会有更多问题要问你。
  • 正如 tezzo 提到的,您可以在浏览器中执行步骤 1 和 2。我成功地使用邮递员(HTTP 客户端)为第 3 步创建了我的 POST 请求,该请求返回了访问和刷新令牌。
  • 我能够使用 scope:read_all 创建令牌,并且能够获得我的俱乐部 (/api/v3/athlete/clubs),但要求运动员活动给了我相同的身份验证错误。 . 这是因为我没有使用永久令牌吗?
  • 抱歉@SebastienPattyn,但我不知道:我一直使用 Strava API 仅读取我的活动,因此我不知道读取其他运动员活动的最小范围/授权。
  • @tezzo 当我在步骤 1 中尝试使用 localhost 时,浏览器显示“localhost 拒绝连接”。
【解决方案2】:

我没有足够的积分来评论,但我最近确实这样做了!

为了使其正常工作,您必须在步骤 1 中设置 scope=activity:read(而不是“scope=read”)。

【讨论】:

  • 好收获!我遵循了当前的oauth example,不得不将生成的重定向url从scope=public更新为scope=activity:read
  • 太棒了!帮了我很多
【解决方案3】:

Strava api 访问...这个简短的 youtube 视频将引导您完成这些步骤。 https://www.youtube.com/watch?v=sgscChKfGyg 这是 github 上的一个文本文件,其中包含相应的链接。 https://github.com/franchyze923/Code_From_Tutorials/blob/master/Strava_Api/request_links.txt

/// get a new access token because it changes. Step 3 in the text file
        var value = new Dictionary<string, string>
         {
            { "client_id", "abc" },
            { "client_secret", "defg" },
            { "refresh_token", "highlmnop" },
            { "grant_type", "refresh_token" }
         };

        var content = new FormUrlEncodedContent(value);
        var result = await client.PostAsync("https://www.strava.com/oauth/token", content);
        string resultContent = await result.Content.ReadAsStringAsync();
        var stravaDetails = JsonConvert.DeserializeObject<StravaRoot>(resultContent);
        // end get new access token


 public class StravaRoot
    {
        public string token_type { get; set; }
        public string access_token { get; set; }
        public int expires_at { get; set; }
        public int expires_in { get; set; }
        public string refresh_token { get; set; }
    }

【讨论】:

    猜你喜欢
    • 2020-10-31
    • 1970-01-01
    • 2020-11-04
    • 2021-03-15
    • 2021-05-23
    • 2012-06-19
    • 1970-01-01
    • 2013-01-28
    • 2022-11-28
    相关资源
    最近更新 更多