首页 > 解决方案 > 尝试使用 $expand(microsoft.graph.itemattachment/item) 读取 ItemAttachment 属性时,Microsoft Graph API“访问被拒绝”

问题描述

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

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

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

我还提到了一个类似的帖子(如何通过 Microsoft Graph API 检索 itemAttachment 的内容),也没有找到任何东西。

以下是详细信息:

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 Application 具有以下权限: 在此处输入图像描述

我正在使用的 microsoft graph API SdkVersion 是:graph-java/v2.3.1。

我不确定我是否在这里遗漏了什么。感谢是否有人可以指导我解决这个问题。

标签: azureazure-active-directorymicrosoft-graph-apimicrosoft-graph-mail

解决方案


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

如果您想graphClient.me()...成功运行代码(),您需要Mail.Read在“ Delegated ”类型而不是“ Application ”类型中添加权限(按照下面屏幕截图中的步骤操作,并且不要忘记授予管理员许可)。 在此处输入图像描述


推荐阅读