Django 与 Microsoft API 365 - 服务发现错误

Django with Microsoft API 365 - Service Discovery error

我正在尝试制作一个可以使用 Microsoft 365 帐户对用户进行身份验证的 Django 应用程序,我在 Github 上找到了这个项目:https://github.com/jasonjoh/pythoncontacts

我按照文档进行操作,然后系统提示我进入 Microsoft 帐户登录页面,在该页面我同意使用 Azure AD 应用程序。

阅读代码后,我了解到 Django 应用程序正在尝试获取可用服务:https://api.office.com/discovery/v1.0/me/services

问题是 link 给我这个错误:

{"error":{"code":"-2147024891, System.UnauthorizedAccessException","message":"Access denied. You do not have permission to perform this action or access this resource."}}

不知道是Azure AD应用权限问题还是代码问题

我的理解是 Django 应用要求 Azure AD 授权端点登录。此端点正在返回登录 window,并且在身份验证后我获得了授权码。有了它,我应该兑换授权代码并在 Azure AD 令牌端点获取访问令牌,以便能够使用它调用 Office 365 API。

这是我的应用程序在 Azure AD 中拥有的权限

您需要在其他应用程序的权限中添加以下内容:"Office 365 Exchange Online"。

如果您没有看到它,请确保您在 Azure 和 Office 365 中有付费订阅。如果您只有 Azure 中的订阅,您将看到不会显示的 "Default Directory"你是上面命名的应用程序。

希望对您有所帮助:)

rGonzalez 是正确的。代码示例使用 Office 365 API 在 Office 365 统一 API 宣布(在 public 预览中)之前正在生产中。您有 2 个选择: - 选项 #1(推荐):使用 Office 365 统一 APIs。您将需要修改您的应用以跳过调用 Discovery APIs 的步骤,而是为 API 文档调用端点 https://graph.microsoft.com/beta. See here。 - 选项 #2:为您的 Office 365 租户获取 Exchange 订阅,因此您会看到 Office 365 Exchange Online 在您的应用程序注册页面中列为一个选项,并且 select "Read and write user calendars"、"Send mail as a user"、和 "Read and write user mail" 作为您应用的权限。

此外,在您所附的屏幕截图中,您没有为您的应用授予 "Read user calendars" 和 "Read user mail" 权限,因为它们已包含在 "Have full access to user calendars" 和 "Read and write access to user mail" 中权限分别。

要访问发现服务,您需要使用 resource=https://api.office.com/discovery/

获取令牌

现在,如果您使用的是统一的新 Office 365 API,则无需使用发现服务,因为所有信息都是从单个端点提供的 https://graph.microsoft.com

希望对您有所帮助