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

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

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

Но когда я пытаюсь выполнить получение, 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.

Итак, моя область разрешений неверна?

Изменить: мой объем был ложным.


person MaverinCode    schedule 02.02.2017    source источник
comment
вы нашли решение этой проблемы?   -  person Just Shadow    schedule 17.02.2017


Ответы (2)


Да, у вас нет нужных прицелов.

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

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

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

person Jorge Aguirre    schedule 02.02.2017

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

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

    "office.onenote%20office.onenote_create%20office.onenote_update_by_app%20office.onenote_update"
    
person Just Shadow    schedule 06.02.2017