我们有一个Windows客户端应用程序,它通过Graph REST API与OneDrive集成。最近,我们开始添加对与当前用户共享的内容的支持,特别是文件夹。我们可以通过以下方式访问这些项目:
获取https://graph.microsoft.com/v1.0/me/drive/sharedWithMe
但是在访问返回的项目时遇到了问题。当我尝试:
获取https://graph.microsoft.com/v1.0/drives/RemoteDriveID/items/RemoteItemID/children
我收到404错误"无法找到资源。"当我尝试将远程站点ID放在那里时(仅包括站点ID和描述的三元组) here)格式为:
获取https://graph.microsoft.com/v1.0/sites/RemoteSiteID/drives/RemoteDriveID/items/RemoteItemID
我得到400错误"提供的id不适合当前的主机"。根据文档,我使用的所有ID都来自remoteItem facet。我们的应用程序具有Files.ReadWrite.All和Sites.ReadWrite.All权限。对服务器的所有其他调用都有效,因此它不是OAuth或基本请求问题。从其他帖子看,其他人似乎都没有遇到这个问题或从未解决过他们的问题。
我们的最终目标是与用户共享一个文件夹,以便我们的应用程序同步内容。
答案 0 :(得分:0)
自从您问@JackHunsinger以来已经有一段时间了,但是之前的文件夹共享方案对我来说有用。
我正在使用为用户A获取的访问令牌,并使用如下请求创建共享权限:
POST https://graph.microsoft.com/v1.0/drives/<driveId>/items/<folderId>/invite
Content-type: application/json
{
{
"recipients":
[
{ "email": "<user B email>" }
],
"requireSignIn": true,
"roles": [ "write" ]
}
}
获取此回复:
{
{
"@odata.context": "https://graph.microsoft.com/v1.0/$metadata#Collection(permission)",
"value":
[
{
"@odata.type": "#microsoft.graph.permission",
"id": "<permissionId>",
"roles": [ "write" ],
"shareId": "<shareId>",
"grantedTo":
{
"user": { "displayName": "<user B>", "id":"<user B id>" }
},
"invitation":
{
"email": "<user B email>",
"signInRequired": true,
"invitedBy": { "user": { "id": "<user B email>" } }
},
"link": { "webUrl": "https://1drv.ms/u/s!<shareId>" }
}
]
}
}
后来,用户B正在检索文件夹内容,例如:
GET https://graph.microsoft.com/v1.0/drives/<driveId>/items/<folderId>?$expand=children
其中两个请求中的driveId
和folderId
相同。即用户B使用remoteItem
构面,就像问题中写的一样。
也许将上述权限json与所获得的内容进行比较,将有助于您查找问题:-)
在您的应用未创建许可的情况下,您可以通过以用户A的身份发送该文件夹来检查该文件夹的许可,这可能会很有用。
GET https://graph.microsoft.com/v1.0/drives/<driveId>/items/<folderId>/permissions
好奇心的记录(对于@DanSilver来说可能很有趣...)
顺便说一句,<user B email>
出现在许可中的"invitedBy"
下-我希望在那里看到<user A email>
...
同样值得注意的是-我认为-shareId
与其他OneDrive用户共享并不是真正需要的。它仅与/shares
端点一起使用,似乎只能进行读取。