office365 - 由于 401 未经授权,使用 Graph API(按应用程序)访问 Office 365 Planner 数据时出现问题

标签 office365 office365api microsoft-graph-api

我一直在努力使用我在 Azure 中设置的应用程序从 Office 365 访问规划器数据。我已经能够成功检索许可和用户信息,但无法获取用户任务列表(来自 Planner)。

进一步说明:

  • 我正在尝试访问其他用户的规划器数据任务,而不是我自己的任务。
  • 这不是面向用户的应用程序,用户永远不会登录。我正在使用注册的应用程序客户端/ key 的 REST 接口(interface),以获得用于后续请求的 token 。我不是以用户身份登录,而是以应用程序身份登录,因此使用“me”将无法像在 graph api explorer 中那样工作。
  • 通信成功,我可以毫无问题地读取和写入任何其他用户数据。问题似乎已经清楚地说明了正在使用的应用程序没有查看规划器数据的授权,但我已授予该应用程序所有权限,并且在尝试读取规划器数据时仍然收到 401。
  • 我不确定所使用的技术是否相关,但为了提供尽可能多的详细信息,我使用了 Nodejs 和 adal-node ( https://github.com/AzureAD/azure-activedirectory-library-for-nodejs )

图形文档:https://graph.microsoft.io/en-us/docs/api-reference/beta/api/user_list_tasks

该文档明确指出执行此操作所需的范围是我已提供给应用程序的 Group.ReadWrite.All 和 Tasks.ReadWrite (以及大量其他权限,因为我变得绝望和恼火)。针对下面列出的每个应用程序检查所有应用程序权限和所有委派权限。在我开始工作后,我将删除必要的内容,但我认为这将有助于缓解“您是否尝试过检查这个..或那个..响应”

I have checked every checkbox in all of the following apps out of desperation

我意识到这是测试版,但希望利用它,并认为也许其他人有更好的运气。

我尝试通过以下两种方式形成请求: https://graph.microsoft.com/beta/users/[username]/plans https://graph.microsoft.com/beta/tasks ?$filter=createdBy eq '[用户名]'

两者都会产生以下结果(大部分消息由于长度已被删除):

{ error: 
   { code: 'UnknownError',
     message: '...<h2>401 - Unauthorized: Access is denied due to invalid credentials.</h2>\r\n  <h3>You do not have permission to view this directory or page using the credentials that you supplied.</h3>...',
     innerError: 
      { 'request-id': '09ef3a04-7fc2-48a0-9570-7f04171e45ed',
        date: '2016-05-11T14:18:12' } } }

最佳答案

我查看了跟踪日志以了解这里发生了什么。正如您上面提到的,您正在使用仅应用程序流程(在 OAuth2.0 术语中也称为 client_credential 流程,但基本上应用程序在没有任何用户的情况下自行调用)来调用 Microsoft Graph(以及此处的任务 API)语境)。使用仅应用程序流程时管理对 API 访问的权限是您在中间列的 UX 屏幕截图中选择的权限(应用程序权限)。

Microsoft Graph 目前不支持仅应用程序访问任务 API。这就是您收到 401 Unauthorized 的原因。为了访问 Microsoft Graph 下的任务 API(在组中),您需要在“委派权限”(UX 中的右侧列)下选择 Group.ReadWrite.All AND Tasks.ReadWrite 权限并使用用于获取具有登录用户上下文的访问 token 的代码流。 Node.js 的 ADAL 应支持应用程序+用户模式下调用的功能。

如果您的方案需要仅应用程序访问 Microsoft Graph,则请提交 uservoice Microsoft Graph 的功能请求,以支持仅限应用程序访问的组和任务。

希望这有帮助,

关于office365 - 由于 401 未经授权,使用 Graph API(按应用程序)访问 Office 365 Planner 数据时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37166344/

相关文章:

microsoft-graph-api - 微软团队 : Push Notifications

javascript - Microsoft Office.js Excel 加载项 - 使用 javascript/react 检索工作表/工作簿唯一 ID

c# - 如何从 Azure Active Directory 获取客户端 secret 以使用一个驱动器业务 API 的 native 应用程序?

azure - 如何在 Service Fabric 应用程序中添加 .NET Core 类库引用

outlook - MailboxNotEnabledForRESTAPI - Microsoft Graph API 与启用 HMA 的本地服务器集成

使用 Office 365 REST API 搜索电子邮件发件人地址

java - 使用 Office-365-SDK-for-Java 获取文件

python - 使用带有 365 电子邮件地址的 SMTPLIB SSL 电子邮件时出错

c# - Microsoft.Graph 作为附件转发

azure - 微软图形API : Accessing presences information via an Application scope