Одна нота Api отклоняет токен на предъявителя, ошибка 401

У меня проблема с отправкой токена на предъявителя в One Note API.

String returnUri = "https://login.live.com/oauth20_token.srf";
HttpClient client = HttpClientBuilder.create().build();
HttpPost tokenRequest = new HttpPost(returnUri);
tokenRequest.setHeader(HttpHeaders.CONTENT_TYPE, "application/x-www-form-urlencoded");
tokenRequest.setEntity(new UrlEncodedFormEntity(Connection.getParametersForURLBody(), Consts.UTF_8));
tokenRequest.addHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.3; WOW64; rv:28.0) Gecko/20100101 Firefox/28.0");
HttpResponse tokenResponse = client.execute(tokenRequest);
HttpGet getTopFiveNotebooks = new HttpGet("https://www.onenote.com/api/v1.0/me/notes/notebooks?top=5");

getTopFiveNotebooks.setHeader(HttpHeaders.AUTHORIZATION, "Bearer " + Connection.getValueByKey("access_token", Connection.getTokenInJson(tokenResponse)));

Я получил Bearer Token и заголовок HttpGet-Request выглядит так, если я смотрю на это в режиме отладки:

Токен в заголовке HtppGet

Но когда я пытаюсь выполнить get, API дает мне 401 Unauthorized Ошибка.

Моя сфера scope=wl.basic+onedrive.readwriteпоэтому токен должен иметь все необходимые ему разрешения.

Обновление: если я войду в https://apigee.com/onenote/embed/console/onenote/ с моей учетной записью microsoft и скопирую оттуда токен доступа в этот фрагмент кода:

getTopFiveNotebooks.setHeader(HttpHeaders.AUTHORIZATION, "Bearer " + acces-key-from-the apigee-console)

это выполняет получить и дать мне Status 200 назад вместо 401,

Так что моя сфера разрешений неверна?

Изменить: моя сфера была ложной.

2 ответа

Решение

Да, у вас нет правильных возможностей.

https://msdn.microsoft.com/en-us/library/office/dn807159.aspx

Вам нужен хотя бы "office.onenote", чтобы получить блокноты пользователя.

Кстати, если вы посмотрите на текст ответа 401, вы увидите, какие области отсутствуют.

Вот несколько случаев, когда может произойти ошибка:

  1. Пожалуйста, обратите внимание, что строка областей также должна быть закодирована, поэтому вместо + ты должен использовать %20,
  2. Также убедитесь, что эта функция, которую вы использовали, возвращает что-либо:Connection.getTokenInJson(tokenResponse)
  3. И попробуйте эту область разрешений, которая прекрасно работает для меня:

    "office.onenote%20office.onenote_create%20office.onenote_update_by_app%20office.onenote_update"
    
Другие вопросы по тегам