Я пытался реализовать OneDrive Business API в соответствии с этими примечаниями к выпуску OneDrive а>. Мы уже внедрили API для конечных пользователей OneDrive без каких-либо проблем.
Первое, что нужно сделать, это обработать аутентификацию OAuth2, чтобы получить нужные токены, сначала обнаружив {tenant} -my.sharepoint.com URI конкретного клиента OneDrive Business, а затем получив токены для этого клиента. Соответствующую документацию можно найти здесь.
Следуя этому руководству, мы смогли сделать следующее:
- Зарегистрируйте приложение в Azure AD. Готово
- Sign into OneDrive for Business
- Log in and get an authorization code. Done
- Погасите код авторизации на токены. Готово
- Откройте для себя URI ресурса OneDrive для бизнеса. НЕ ИСПОЛЬЗУЕТСЯ
- Активируйте токен обновления для токена доступа для вызова API OneDrive. Готово
- Сделайте запрос к API OneDrive. НЕ ИСПОЛЬЗУЕТСЯ
Понятно, у нас возникли проблемы на шаге 2, Найдите URI ресурса OneDrive для бизнеса и Сделайте запрос к API OneDrive em >.
Проблема при обнаружении URI ресурса OneDrive для бизнеса
Проблема с этой частью процесса заключается в том, что, хотя мы обращаемся к api.office.com/discovery/v2.0/me/services с первым полученным токеном доступа после погашения с помощью ресурса api.office.com/discovery/ мы не попадаем в список URI точки доступа для конкретного клиента службы для OneDrive для бизнеса. Любая запись в списке, который мы получаем, сопровождается 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, он хорошо настроен, и я вижу URI {tenant} -my.sharepoint.com.
Проблема при отправке запроса к API OneDrive
Кроме того, я не могу обнаружить правильный URI точки доступа клиента, если я жестко закодирую URL-адрес для погашения следующего запроса токена доступа с помощью моего URI точки доступа клиента, Я получаю токен доступа, но когда я хочу позвонить, например, в 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 отсутствует какая-то конфигурация?
Кстати, объем разрешений в моем приложении, который я получаю при каждом погашении, составляет AllSites.FullControl AllSites.Manage MyFiles.Write Sites.Search.All TermStore.ReadWrite.All User.Read.All
. Я думаю, что у меня правильно установлены разрешения.
Лучший,
Пункт списка