Что такое вызов API REST для анонимной загрузки в общедоступную папку на OneDrive?
Я попытался открыть общий доступ к папке через веб-интерфейс OneDrive, создав ссылку с надписью: «Любой пользователь, имеющий эту ссылку, может редактировать этот элемент» и используя REST API:
POST https://graph.microsoft.com/v1.0/drives/{driveId}/items/{sharedFolderId}/createLink
Content-type: application/json
{
"type": "edit",
"scope": "anonymous"
}
В обоих случаях я могу читать из общей папки без входа в систему по
GET https://api.onedrive.com/v1.0/shares/{shareId}/items/{sharedFolderId}
Я также могу прочитать само разрешение, используя
GET https://api.onedrive.com/v1.0/shares/{shareId}/items/{sharedFolderId}/permissions
=>
{
"@odata.context":"https://api.onedrive.com/v1.0/$metadata#shares('{shareId}')/items('{sharedFolderId')/permissions",
"value":
[
{
"id":"{permissionId}",
"link":
{
"application":
{
"displayName":"{my own app}",
"id":"{short app id}"
},
"type":"edit",
"webUrl":"https://1drv.ms/u/{shareId}"
},
"roles":["write"],
"shareId":"{shareId}",
"expirationDateTime":"0001-01-01T00:00:00Z",
"hasPassword":false
}
]
}
Однако при попытке загрузить файл или создать подпапку, т.е.
PUT https://api.onedrive.com/v1.0/shares/{shareId}/driveItem:/{filename}:/content
Content-type: text/plain
some text goes here
или
POST https://api.onedrive.com/v1.0/shares/{shareId}/items/{sharedFolderId}/children
Content-type: application/json
{
"name": "TestFolder",
"folder": { }
}
оба проваливаются как несанкционированные вызовы, но разве смысл «редактировать» ссылку с «анонимной» областью действия состоит в том, что «любой пользователь с этой ссылкой может редактировать этот элемент»?
Я пробовал различные комбинации https://graph.microsoft.com/v1.0
вместо https://api.onedrive.com/v1.0
и /drives/{driveId}
вместо /shares/{shareId}
, а также /shares/{shareToken}
, где shareToken
- это кодировка "u!" webUrl
от link
в разрешении.
До сих пор без возможности выяснить правильный вызов REST API. Я надеюсь, что кто-то может помочь: -)
Вы можете загрузить мой TestOneDrive Тестовый проект Visual Studio для воспроизведения проблем. Он также содержит код инициализации для создания и публикации папки.