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

时间:2015-06-30 14:38:35

标签: python django azure office365

我试图创建一个可以使用Microsoft 365帐户验证用户的Django应用程序,我在Github上找到了这个项目:https://github.com/jasonjoh/pythoncontacts

我按照文档操作,直到我提示进入Microsoft帐户登录页面,我同意Azure AD应用程序。

阅读完代码后,我了解Django应用程序正试图通过以下网址获取服务:https://api.office.com/discovery/v1.0/me/services

问题是链接给了我这个错误:

{"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授权端点登录。此端点返回登录窗口,在身份验证后,我获得授权代码。有了它,我应该兑换授权代码并在Azure AD令牌端点获取访问令牌,以便能够使用它调用Office 365 API。

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

3 个答案:

答案 0 :(得分:1)

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

如果您没有看到它,请确保您在Azure和Office 365中拥有付费订阅。如果您只在Azure中订阅,则会看到"默认目录"它不会向您展示上面提到的应用程序。

希望有所帮助:)

答案 1 :(得分:0)

rGonzalez是对的。代码示例使用在Office 365 Unified API发布之前生成的Office 365 API(在公共预览中)。你有2个选择: - 选项#1(推荐):使用Office 365 Unified API。您需要修改应用程序以跳过调用Discovery API的步骤,而是调用端点https://graph.microsoft.com/beta。有关API文档,请参阅here。 - 选项#2:获取Office 365租户的Exchange订阅,以便在应用程序注册页面中将Office 365 Exchange Online列为选项,并选择"读取和写入用户日历",&#34 ;以用户身份发送邮件","读写用户邮件"作为您应用的权限。

此外,在您附上的屏幕截图中,您不会阅读用户日历"和"阅读用户邮件"您的应用的权限,因为它们已包含在"具有对用户日历的完全访问权限#34;和#34;对用户邮件的读写访问权限#34;权限分别。

答案 2 :(得分:0)

要访问发现服务,您需要获取资源= https://api.office.com/discovery/

的令牌

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

希望有所帮助