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
希望对您有所帮助
我正在尝试制作一个可以使用 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
希望对您有所帮助