Microsoft Graph API "Access is denied" 在尝试使用 $expand(microsoft.graph.itemattachment/item) 读取 ItemAttachment 属性时

Microsoft Graph API "Access is denied" while trying to read the ItemAttachment Properties with $expand(microsoft.graph.itemattachment/item)

我正在尝试检索消息类型的 ItemAttachment 的属性。我已提供所有必需的权限并能够接收 ItemAttachment 属性。 但是当我使用 $expand 获取 ItemAttachment 消息的更多属性时。我收到 拒绝访问错误。

根据我的阅读,它说您需要 Mail.read 权限,我已经为 Graph API 和我的 Azure AD 应用程序提供了权限我能够获取所有消息,但只有当我尝试使用 $expand 获取消息类型的 ItemAttachment 的属性时,我才收到访问被拒绝的消息。

我找不到与在 Microsoft 文档 (https://docs.microsoft.com/en-us/graph/api/attachment-get?view=graph-rest-1.0&tabs=java) 上运行可能需要的特定权限相关的任何内容。

我也提到了类似的 post (),但也没有找到任何东西。

详情如下:

Java代码:

graphClient.me().messages(messageId).attachments(attachmentId)
                .buildRequest()
                .expand("microsoft.graph.itemattachment/item")
                .get();

这会生成如下所示的 REST 调用:

GET https://graph.microsoft.com/v1.0/me/messages/A2zjArAAA=/attachments/5AlfysT-Cz27w=?$expand=microsoft.graph.itemattachment/item

但我遇到了“拒绝访问”错误。

403 : Forbidden
Cache-Control : private
Content-Length : 101
Content-Type : application/json; odata.metadata=minimal; odata.streaming=true; IEEE754Compatible=false; charset=utf-8
{
  "error": {
    "code": "ErrorAccessDenied",
    "message": "Access is denied. Check credentials and try again."
  }
}

我的应用程序 Azure Active Directory 应用程序具有以下权限:

我使用的微软图API SdkVersion是:graph-java/v2.3.1.

我不确定我是否遗漏了这里的任何内容。 如果有人可以指导我解决这个问题,我将不胜感激。

正如 Shiva 在评论中提到的,您在代码中使用了 graphClient.me(),但您分配了“Application”类型的 Mail.Read 权限。如果分配“Application”类型的权限,它只需要client_idscopeclient_secretgrant_type来获取访问令牌。所以访问令牌不包含用户信息,广告不知道谁是 me,所以代码 graphClient.me() 无法识别。

如果你想运行代码(graphClient.me()...)成功,你需要在“Delegated”类型中添加权限Mail.Read但不是“Application”类型(按照下面屏幕截图中的步骤操作,也不要忘记授予管理员同意)。

当您使用应用程序权限时,它就像您拥有一个守护程序应用程序一样接缝,并且您用于守护程序应用程序的流程将生成 App 令牌。这无法识别 /me 因为这里没有用户。所以尝试使用 /users/{userid}/messages.