azure - 尝试使用 $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。
我不确定我是否在这里遗漏了什么。感谢是否有人可以指导我解决这个问题。
解决方案
正如 Shiva 在评论中提到的,您graphClient.me()
在代码中使用,但您分配了“应用程序”类型Mail.Read
的权限。如果分配“应用程序”类型的权限,它只需要, , ,来获取访问令牌。所以访问令牌不包含用户信息,广告不知道是谁,所以无法识别代码。client_id
scope
client_secret
grant_type
me
graphClient.me()
如果您想graphClient.me()...
成功运行代码(),您需要Mail.Read
在“ Delegated ”类型而不是“ Application ”类型中添加权限(按照下面屏幕截图中的步骤操作,并且不要忘记授予管理员许可)。