【发布时间】:2021-12-26 22:55:07
【问题描述】:
我是 Graph API 的新手,我想使用来自守护程序应用程序的事件时间表来调用我的 Outlook 日历。 当我使用用于登录 Azure 的电子邮件登录 Microsoft 帐户时,我可以正常查看日历,还可以使用 Graph Explorer 调用 Web API。 例如。图形资源管理器调用: https://graph.microsoft.com/v1.0/me/calendars 当我使用我的 Microsoft 帐户登录时,可以正常返回我的日历事件。
现在。我希望能够使用服务应用程序访问相同的 API,即无需用户登录提示。所以我去了 Azure 门户,创建并注册了一个新应用程序,在管理员同意的情况下为其授予 Calendar.Read API 权限,并下载了一个快速启动守护程序应用程序,该应用程序使
等待 apiCaller.CallWebApiAndProcessResultASync($"{config.ApiUrl}v1.0/users", result.AccessToken, 显示);
调用有效,即它返回一个用户,以便我可以看到“userPrincipalName”:“XYZ@.onmicrosoft.com”,这不是 Graph Explorer 调用返回的。图形浏览器调用: https://graph.microsoft.com/v1.0/users 返回“userPrincipalName”:“myactualemail” 所以基本上当我调用 Graph Explorer 时: 图.microsoft.com https://graph.microsoft.com/v1.0/me/calendars 它返回正确的日历结果。 但是,等效的守护程序 API 调用 等待 apiCaller.CallWebApiAndProcessResultASync($"{config.ApiUrl}v1.0/users/f5a1a942-f9e4-460b-9c6c-16f45045548f/calendars", result.AccessToken, Display); 返回:
Failed to call the web API: NotFound
Content: {"error":{"code":"ResourceNotFound","message":"Resource could not be discovered.","innerError":{"date":"2021-12-26T16:46:35","request-id":"67ef50e4-bec6-48ae-9e45-7765436d1345","client-request-id":"67ef50e4-bec6-48ae-9e45-7765436d1345"}}}
我怀疑问题在于 Graph Explorer 和守护程序应用程序之间的 userPrincipalName 不匹配,但我找不到解决方案。 另请注意,需要手动用户登录的普通 ASP.Core 示例可以正常工作。问题仅在于守护程序应用程序。
【问题讨论】:
标签: azure-active-directory microsoft-graph-api azure-web-app-service outlook-api