Microsoft graph api 状态代码:禁止;原因:此用户或应用程序未授权该请求

Microsoft graph api 状态代码:禁止;原因:此用户或应用程序未授权该请求,microsoft-graph-api,microsoft-graph-teams,Microsoft Graph Api,Microsoft Graph Teams,我正在尝试为特定用户订阅Microsoft Team Presence API 请求Url: https://graph.microsoft.com/beta/subscriptions 请求主体 { “变更类型”:“已创建,已更新”, '通知URL':'https:///presence-notify/', “资源”:“/communications/presences/{id}”, “expirationDateTime”:“2020-09-10T07:37:13Z”, “clientS

我正在尝试为特定用户订阅Microsoft Team Presence API

请求Url:

https://graph.microsoft.com/beta/subscriptions
请求主体

{
“变更类型”:“已创建,已更新”,
'通知URL':'https:///presence-notify/', 
“资源”:“/communications/presences/{id}”,
“expirationDateTime”:“2020-09-10T07:37:13Z”,
“clientState”:“secretClientState”
}
回应

{
“错误”:{
“代码”:“ExtensionError”,
“消息”:“操作:创建;异常:[状态代码:禁止;原因:此用户或应用程序未授权该请求。]”,
“内部错误”:{
“日期”:“2020-09-09T11:27:27”,
“请求id”:“c563f94d-3c10-4c09-be35-0d1993d9a112”
}
}
}
管理员请求并授予了以下委派权限:

  • Presence.阅读
  • Presence.Read.All
客户端证书Pic


您需要指定
加密证书。从:

状态信息订阅需要。如果未指定,订阅创建将失败


我终于能够解决这个问题了。正如所提到的错误
一样,此用户或应用程序未授权该请求
。因此我认为访问令牌可能有问题。实际上,我是代表应用程序调用API的,即使用grant_类型为
client_credentials
的令牌。相反,我应该代表用户调用API,即grant_类型为
password
的令牌,因为在那篇文章中明确提到了这一点
权限已委派。我没有使用任何
encryptionCertificate
但订阅仍然成功。

先生,您是说用黄色突出显示的值吗?问题详细信息已更新。这是一个应用Id。此证书是一个证书的base64编码表示形式,该证书具有用于加密更改通知中的资源数据的公钥。对于这样的通知,您需要提供用于加密数据的证书。我终于解决了这个问题。我使用AppAccessToken作为授权承载令牌,但当我再次浏览文档时,提到的权限是委托权限。因此,使用UserAccessToken调用解决了问题。我的情况与此相同,但我只存储了一个访问令牌:如何获取此用户令牌?这是我的有效负载字符串
payload=f'grant\u type=password&client\u id={client\u id}和client\u secret={client\u secret}&scope={api\u scope}&userName={userName}&password={password}
。要获取用户令牌,授权类型应为
密码
username
password
是存在于租户中的用户的凭据,您将代表该用户调用API。请不要被
f
弄糊涂。实际上,这是python
f-string
功能。我正在向microsoft发出POST请求以获取用户令牌。如果您想要完整的功能,请发布一个新问题。我将回答:)这有助于检查您的令牌是否已授权