Проблема с токеном доступа в Strava API v3 ПОЛУЧИТЕ все действия атлета

У меня проблемы с доступом ко всем видам деятельности спортсмена (моей) из URL в документации API Стравы.

Я могу получить собственную статистику за год:

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? Я вошел в систему и поэтому не понимаю, почему я не могу получить доступ к своей собственной информации. пожалуйста, порекомендуйте

3 ответа

15 октября 2018 года Strava расширила процесс авторизации, представив новый список областей применения.

Используете ли вы токен доступа, который вы найдете на https://www.strava.com/settings/api?

Этот токен имеет scope:read этого может быть недостаточно, чтобы делать то, что вы хотите (то есть, ваша деятельность публичная или частная?).

Если вам нужен новый токен с разными областями действия, вы должны выполнить следующие шаги.

ШАГ 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 содержащий код авторизации; вы найдете новый access_token в ответе JSON.

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

Вы можете найти идентификатор клиента, секрет клиента и домен обратного вызова на странице вашего приложения.

Вы можете найти список новых областей применения в этой документации.

Теперь список подсказок, если вы единственный человек, который использует ваше приложение:

  • вы можете вручную сделать первые 2 шага, используя браузер и http://localhost как домен обратного вызова
  • используя старый scope:view_private вы можете получить то, что Страва назвал токеном навсегда: вы можете использовать этот токен до 15 октября 2019 года, не повторяя 3 шага
  • сегодня scope=read,activity:read_all,profile:read_all,read_all кажется, что полученный короткоживущий токен не работает, когда вы запрашиваете подробную активность

У меня недостаточно очков для комментариев, но я сделал именно это недавно!

Чтобы он заработал, вам нужно установить scope=activity:read (вместо того 'scope=read') на шаге 1.

Доступ к 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; }
    }
Другие вопросы по тегам