我正在尝试使用 MS Graph API 从 OneDrive for Business 获取文件/文件夹列表。我已经在 Graph Explorer 中成功执行了我需要的查询,现在正在我的项目中实施。
我的应用程序是 Windows 服务,因此我使用此方法获取令牌
我已成功检索到令牌,但是当我“获取”此 URL 时...
//graph.microsoft.com/v1.0/users('someuseraccount')/drive/items/somedriveitem/microsoft.graph.createLink
...我收到错误回复:
令牌中需要存在 scp 或角色声明。
我来自服务器的令牌响应如下:
{
"token_type": "Bearer",
"expires_in": "3600",
"scope": "Directory.AccessAsUser.All Files.Read Files.Read.Selected Files.ReadWrite Files.ReadWrite.AppFolder Files.ReadWrite.Selected profile Sites.Read.All User.Read",
"expires_on": "1457343736",
"not_before": "1457339836",
"resource": "https://graph.microsoft.com",
"access_token": "-the token-"
}
Run Code Online (Sandbox Code Playgroud) 我正在使用图形API遍历OneDrive for Business中的文件夹。我正在尝试使用以下调用为文件夹中的每个项目生成“匿名视图”链接:
/v1.0/users('user-guid')/drive/items/item-id/microsoft.graph.createLink
与身体:
{
"type": "view",
"scope": "anonymous"
}
Run Code Online (Sandbox Code Playgroud)
对于已通过OneDrive UI授予“查看链接-无需登录”权限的项目,此方法正确运行。但是,对尚未设置此共享选项的项目执行此调用将导致以下返回消息:
{
"error": {
"code": "unauthenticated",
"message": "The caller is not authenticated.",
"innerError": {
"request-id": "1c3600ec-4861-4be4-9a7b-74264f488a80",
"date": "2016-03-13T02:30:10"
}
}
}
Run Code Online (Sandbox Code Playgroud)
我知道这不是身份验证问题,因为我的令牌可用于所有其他调用(以及针对已设置了文件共享集的项目的调用)。我从Microsoft Graph Explorer工具得到相同的行为。如果我在OneDrive中手动设置了“查看链接-无需登录”权限,则此调用将完美执行。我用于API调用的凭据与我用来在OneDrive UI中设置权限的凭据相同。
microsoft.graph.createLink的文档指出
如果指定的链接类型尚不存在,则createLink方法将创建一个新的共享链接。如果应用程序已存在指定类型的共享链接,则将返回现有的共享链接。
任何想法出什么事了吗?
我正在构建一个 Windows 服务,使用以下方法通过 Graph API 连接到 OneDrive for Business: https: //graph.microsoft.io/en-us/docs/authorization/app_only
我已成功验证了我的应用程序,并拥有用于调用 Graph API 的令牌。我已向 Windows Azure Active Directory 和 Microsoft Graph 授予我的 Azure AD 应用程序权限(已为两者选择了所有应用程序和委派权限)。
我的目标是获取驻留在特定用户 OneDrive 中的文件夹的内容。我需要进行以下图形 API 调用:
//graph.microsoft.com/v1.0/users('user-guid')/drive/items/long-item-id-here/children
Run Code Online (Sandbox Code Playgroud)
我可以使用 Microsoft Graph Explorer(使用我的 Office 365 凭据登录)成功执行此请求。当我尝试进行与应用程序相同的调用(使用上面收到的身份验证令牌)时,我收到“itemNotFound”代码,其中包含消息“找不到资源”。(请求 ID:5e814dce-c4c2-4615-90e6-ea8ab90cbc49)。但是,我可以查询根目录,并且“folder.childCount”属性显示根目录中正确的子级数量:
//graph.microsoft.com/v1.0/users('user-guid')/drive/root
Run Code Online (Sandbox Code Playgroud)
我已将文件夹的共享设置为“所有经过身份验证的用户”,但我仍然从 API 调用中收到“找不到资源”。
关于我在这里缺少什么有什么想法吗?