Проблемы OneDrive для Business API при обнаружении и авторизации

Я пытаюсь реализовать OneDrive Business API в соответствии с этим Заметки о выпуске OneDrive. Мы уже внедрили API конечных пользователей OneDrive без каких-либо проблем.

Первое очевидное, что нужно сделать, - это обработать аутентификацию OAuth2, чтобы получить правильные жетоны, сначала открыть {tenant} -my.sharepoint.com конкретный идентификатор Tenant OneDrive Business URI и после этого получить токены для этого арендатора. Для этой цели можно было найти здесь.

Следуя этому руководству, мы смогли сделать следующее:

  • Зарегистрируйте приложение в Azure AD. Готово
  • Войдите в OneDrive для бизнеса
    • Войдите и получите код авторизации. Готово
    • Выполнить код авторизации для токенов. Готово
    • Откройте URI ресурса OneDrive for Business. СБОЙ
    • Исключить токен обновления для токена доступа для вызова OneDrive API. Готово
    • Сделайте запрос к API OneDrive. СБОЙ

Понятно, что у нас были проблемы на шаге 2, Откройте URI ресурса OneDrive для бизнеса и Сделайте запрос к API OneDrive.

Проблема при обнаружении URI ресурса OneDrive для бизнеса

Проблема с этой частью процесса заключается в том, что мы нажимаем api.office.com/discovery/v2.0/me/services на первый токен доступа, полученный после выкупа с ресурсом api.office.com/discovery/, мы не попадаем в список специализированных URI-приложений для индивидуальных пользователей для OneDrive for Business. Любая запись в списке, который мы получаем, соответствует capability = "MyFiles" AND serviceApiVersion = "v2.0" в соответствии с документацией. Фактически любая запись в списке имеет структуру {tenant} -my.sharepoint.com в serviceEndpointUri. Это ответ JSON, я возвращаюсь. Я удалил некоторые конфиденциальные данные:

{
"@odata.context" : "https://api.office.com/discovery/v2.0/me/$metadata#allServices",
"value" : [ {
  "capability" : "Directory",
  "providerName" : "Microsoft",
  "serviceAccountType" : 2,
  "serviceApiVersion" : "",
  "serviceEndpointUri" : "http://azure.microsoft.com/",
  "serviceName" : "Microsoft Azure",
  "serviceResourceId" : null
}, {
  "capability" : "MyFiles",
  "providerName" : "Microsoft",
  "serviceAccountType" : 2,
  "serviceApiVersion" : "",
  "serviceEndpointUri" : "http://www.microsoft.com/en-us/office365/online-software.aspx",
  "serviceName" : "Office 365 SharePoint",
  "serviceResourceId" : null
}, {
  "capability" : "RootSite",
  "providerName" : "Microsoft",
  "serviceAccountType" : 2,
  "serviceApiVersion" : "",
  "serviceEndpointUri" : "http://www.microsoft.com/en-us/office365/online-software.aspx",
  "serviceId" : "O365_SHAREPOINT",
  "serviceName" : "Office 365 SharePoint",
  "serviceResourceId" : null
}, {
  "capability" : "MyFiles",
  "providerName" : "Microsoft",
  "serviceAccountType" : 1,
  "serviceApiVersion" : "",
  "serviceEndpointUri" : "https://g.live.com/8seskydrive/HomePageUrl",
  "serviceName" : "OneDrive",
  "serviceResourceId" : null
} ]
}

Проблема с этим заключается в том, что я вошел в свой портал portal.office.com и проверял мои URL-адреса sharepoint, он хорошо настроен, и я могу видеть {tenant} -my.sharepoint.com URI.

Проблема при выполнении запроса к API OneDrive

Кроме того, я не могу найти правильный идентификатор пользователя sharepoint URI, если я жестко запрограммировал URL-адрес для повторного использования следующего запроса Access Token с моим идентификатором общего ресурса арендатора strong > , я получаю токен доступа, но когда я хочу сделать вызов, например, на https://{tenant}-my.sharepoint.com/drive/root или любую другую конечную точку, я получаю 401 Unauthorize ответ в каждом вызове, даже когда только что был куплен токен. Вот пример рукопожатия. Я скрываю конфиденциальные данные:

curl -v 'https://{tenant}-my.sharepoint.com/drives' -H 'Authorization:   Bearer TOKEN_ACQUIRED'
Connected to {tenant}-my.sharepoint.com port 443
GET /drives HTTP/1.1
Host: {tenant}-my.sharepoint.com
Authorization: Bearer TOKEN_ACQUIRED

HTTP/1.1 401 Unauthorized

Не могли бы вы посоветовать мне это? Есть ли какая-то конфигурация в моем арендаторе? Есть ли какая-то конфигурация, отсутствующая в моем приложении Azure AD?

BTW, область разрешений на моем приложении, я получаю в каждом выкупе AllSites.FullControl AllSites.Manage MyFiles.Write Sites.Search.All TermStore.ReadWrite.All User.Read.All. Я думаю, что у меня правильно установлены разрешения.

Бест,

Элемент списка

Ответ 1

Возможно, будет немного поздно, но в этой статье в блоге говорится о том, как точно использовать API OneDrive и API OneDrive для бизнеса. Вот быстрый фрагмент кода Java:

CloudRail.setAppKey("[CloudRail License Key]");

// CloudStorage cs = new OneDrive(redirectReceiver, "[clientIdentifier]", "[clientSecret]", "[redirectUri]", "[state]");
CloudStorage cs = new OneDriveBusiness(redirectReceiver, "[clientID]", "[clientSecret]", "[redirectUri]", "[state]");

new Thread() {
    @Override
    public void run() {
        cs.createFolder("/TestFolder");
        InputStream stream = null;
        try {
            stream = getClass().getResourceAsStream("Data.csv");
            long size = new File(getClass().getResource("Data.csv").toURI()).length();
            cs.upload("/TestFolder/Data.csv", stream, size, false);
        } catch (Exception e) {
            // TODO: handle error
        } finally {
            // TODO: close stream
        }
    }
}.start();