![](/img/trans.png)
[英]How to refresh the token of Microsoft Graph API without Client Secret for an Enterprise App?
[英]"User not found" for Graph API request in the Azure enterprise app security group with client credentials auth flow
设计
目标
获取给定用户的日历事件。
要求
实施/设置
application permissions
security group
- 如此处所述 - 由有限数量的用户创建,这些用户具有包含相关权限的相关policy
(参见此处)。 该小组后来按照此说明连接到该应用程序。Calendar.Read
和Calendar.ReadWrite
已添加到上一个设置步骤中提到的策略中。测试
使用了两个 HTTP 请求:一个用于获取令牌,另一个用于读取事件。
Identity Platform
的令牌请求curl --location --request POST 'https://login.microsoftonline.com/<TENANT_ID>/oauth2/v2.0/token' \
--data-raw 'client_id=<APPLICATION_TOKEN>&scope=https%3A%2F%2Fgraph.microsoft.com%2F.default&client_secret=<APPLICATION_SECRET>&grant_type=client_credentials'
在此处检查令牌后,我发现它包含所需的权限:
"roles": [
"Calendars.Read",
"Calendars.ReadWrite"
]
Graph API
获取日历事件的请求curl --location --request GET 'https://graph.microsoft.com/v1.0/users/<USER_ID>/calendar/events' \
--header 'Authorization: Bearer <TOKEN>'
导致以下错误:
{
"error": {
"code": "ResourceNotFound",
"message": "User not found",
"innerError": {
"date": "2022-02-08T08:25:39",
"request-id": "bfaca1f9-e79b-491c-8d75-5a62317e299b",
"client-request-id": "bfaca1f9-e79b-491c-8d75-5a62317e299b"
}
}
}
用户 ID 来自我在 Azure 租户的 Azure Active Directory 详细信息中找到的帐户。 添加其他用户后,我仔细检查了这一点。
询问前调查
这个问题看起来最接近我的情况,因为它使用客户端凭据身份验证流程。 但它对 AAD 中的所有用户使用全局权限,而我们对security group
使用更细粒度的方法。 它还显示不同的错误"Resource could not be discovered."
与我的情况下的"User not found"
相比。
为了调用 /{user-id}/calendar/events 来工作,如果您使用守护程序应用程序的客户端凭据,用户必须在 Exchange Online 上拥有邮箱。
此外,似乎无法向来宾帐户(在这种情况下为个人帐户)分配许可证,因此用户帐户永远无法访问日历服务(o365 在线交换的一部分),因此无法检索个人的日历信息帐户。
详细说明请参考我在Q&A中类似的回答。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.