我试图从outlook日历中获取事件,但这样做时出错。我在Azure Portal上注册了一个应用程序(免费计划),我正在使用它来读取Nodejs的事件。以下是我设置的权限,以便能够查询Microsoft Graph API:
ApiPermissions
使用https://login.microsoftonline.com/{tenantId}/oauth2/authorize?client_id={clientId}&response_type=code&redirect_uri=http://localhost:3000&scope=https://graph.microsoft.com/.default openid profile offline_access&state=12345
,我已经能够获得一个{code},我正在使用https://login.microsoftonline.com/{tenantId}/oauth2/v2.0/token
使用这个body参数兑换访问令牌:
{
"grant_type": "authorization_code",
"code": "{code}",
"redirect_uri": "http://localhost:3000",
"client_id": "{clientId}",
"client_secret": "{clientSecret}",
"scope": "https://graph.microsoft.com/.default openid profile offline_access"
}
我相信这个令牌的范围也适合我所需要的:
TokenError
当我尝试向https://graph.microsoft.com/v1.0/{tenantId}/users
甚至https://graph.microsoft.com/v1.0/997f56e7-06b6-44ad-be6a-3cc7377ae54a/users/{userId}
发出请求时,我可以毫无问题地获得用户数据。响应如下所示:
{
"@odata.context": "https://graph.microsoft.com/v1.0/$metadata#users/$entity",
"businessPhones": [],
"displayName": "My Display Name",
"givenName": "My Name",
"jobTitle": null,
"mail": null,
"mobilePhone": null,
"officeLocation": null,
"preferredLanguage": "en",
"surname": "My Surname",
"userPrincipalName": "...@....onmicrosoft.com",
"id": "aaaaaaaa-bbbb-cccc-..."
}
但是当我向https://graph.microsoft.com/v1.0/{tenantId}/users/{userId}/calendars
发出请求时,我得到以下错误:
{"error":{"code":"OrganizationFromTenantGuidNotFound","message":"The tenant for tenant guid '\[tenantGuid\]' does not exist.","innerError":{"oAuthEventOperationId":"bf9e026f-6160-4975-8952-1796d0903882","oAuthEventcV":"tiG/jGvOvqjHEw5i0jde2Q.1","errorUrl":"https://aka.ms/autherrors#error-InvalidTenant%22,%22requestId%22:%22b274ff09-22e7-48ff-abfa-1703c90ad358%22,%22date%22:%222023-03-28T07:42:17"}}}
我就用了documentation。
还有,我对这个错误做了广泛的搜索,我发现我需要微软365订阅,所以我买了一个。我目前有微软365个人计划。
我还在Azure Portal上添加了Office 365管理API权限。
我仍然有同样的问题,我需要重新设置租户吗?我是否需要更改配置中的某些内容,或者我是否遗漏了某些内容?也许我没有正确的订阅,我需要Microsoft 365 Business订阅吗?我该怎么解决呢?
有趣的是,当我尝试使用Microsoft Graph Explorer发出完全相同的请求时,它会按预期工作。如果我在我的后端使用访问令牌选项卡中给出的令牌,它也可以正常工作,所以我相信问题在于我得到的令牌。
1条答案
按热度按时间n3h0vuf21#
我创建了一个Azure AD应用程序并授予API权限,如下所示:
我使用以下端点生成了验证码:
我使用以下参数生成了访问令牌:
当我解码令牌时,存在范围:
使用上面生成的访问令牌,我能够成功获取日历详细信息,如下所示:
如果租户中缺少执行操作的许可证,则通常会发生错误。
要解决此错误,请订阅O365许可证并将O365许可证分配给用户,如下所示:
如果问题仍然存在,请检查以下内容: