我已经设置了一个天蓝色应用程序并授予了获取登录用户的日历列表所需的所有权限
现在我正在从邮递员处调用日历列表 api,并提供所有必需的凭据,其范围如下
Calendars.ReadWrite Calendars.Read Calendars.Read.Shared Calendars.ReadBasic
我成功获取访问令牌
但是当我调用日历列表 api 时使用该令牌
https://graph.microsoft.com/v1.0/me/calendars
我收到以下错误
{"error":{"code":"AuthOMMissingRequiredPermissions","message":"The AadGuestPft token doesn't contain the permissions
required by the target API for calling app
'00000003-0000-0000-c000-000000000000'.","innerError":{"oAuthEventOperationId":"a244c7b2-8c6f-4c98-874c-5f8e1df48d02","oAuthEventcV":"tEIoCwoZzcePn4FTJroLdw.1.1.1","errorUrl":"https://aka.ms/autherrors#error-InvalidGrant","requestId":"71f80207-9747-4191-928c-7180601269f5","date":"2024-12-16T14:22:18"}}}
错误:“代码”:“AuthOMMissingRequiredPermissions”,“消息”:“AadGuestPft 令牌不包含权限 调用应用程序的目标 API 需要
此错误通常发生在用户以访客用户身份登录时,因为访客用户在资源租户内没有 Exchange 邮箱,因此您无法获取日历数据。
用户只能获取创建用户的根租户中的日历事件。
要解决该错误,需要使用authorization_code流程生成访问令牌,用于生成代码使用
/common/oauth2/v2.0/authorize
端点并用于生成访问令牌/common/oauth2/v2.0/token
。
在资源租户中注册了多租户 Microsoft Entra ID 应用程序,添加了
Calendar.ReadWrite
委派类型 API 权限和授予管理员同意,如下所示:
使用
authorization_code
流程生成访问令牌。
为了获得
code
,我在浏览器中运行了授权请求:
https://login.microsoftonline.com/common/oauth2/v2.0/authorize?
&client_id=<AppID>
&response_type=code
&redirect_uri=YOUR REDIRECT URI
&response_mode=query
&scope=https://graph.microsoft.com/.default
&state=12345
现在,使用以下参数生成访问令牌:
GET https://login.microsoftonline.com/common/oauth2/v2.0/token
client_id = <app_id>
client_secret = <client_secret>
grant_type=authorization_code
scope=https://graph.microsoft.com/.default
redirect_uri= https://jwt.ms
code=<code>
列出日历事件:
GET https://graph.microsoft.com/v1.0/me/calendars
参考: