Office 365统一API(预览)请求401错误

时间:2015-07-26 19:18:29

标签: office365 azure-active-directory onedrive office365api

我尝试使用Office 365统一API(预览)制作一些有趣的东西,并坚持授权。 我用我需要的所有权限创建了应用程序 enter image description here

我尝试使用网址登录用户 " https://login.windows.net/common/oauth2/authorize?response_type=code&client_id= {CLIENT_ID}&安培;资源= https://graph.microsoft.com/"

Evething运作良好。

我甚至可以通过https://login.windows.net/common/oauth2/token的请求获取所有范围的access_token。

enter image description here

BUT!我有问题,我无法获得有关用户的任何信息,也无法获取他的文件。

我试图提出这样的请求: enter image description here

我总是只获得HTTP状态401 Unauthorized。

我做错了什么?

ALSO 有关统一API的可能性的问题。我的目标是上传大文件(最大1GB)。是否可以使用统一的API?我在文档中找不到任何内容,但我发现使用OneDrive for Business API是不可能的(最大文件大小为100MB)。

2 个答案:

答案 0 :(得分:2)

今天早些时候遇到的问题一直很困难:总是得到401 Unauthorized或其他错误。然后我跑过这个答案:Building a multi-tenant app for SharePoint Online O365

就是这样:它非常违反直觉,但答案是在获取发现URL的令牌并执行服务发现后,您需要获取要调用的每个serviceResourceId的令牌。这里有两个非常重要的要点,即将近8个小时的阅读文档并没有明显清晰。

每个服务资源ID都有不同的令牌

第一点非常令人困惑:我假设这样做是因为单个租户应用程序在不同的集群上运行,而Microsoft已选择不使用单一授权服务。执行多租户的每个其他实施(例如,Google Apps实施)都会为您提供一个令牌,将您的所有权限包装到一个球中。

您可以使用相同的代码致电令牌回收服务多次

令人难以置信违反直觉(我故意使用大胆的上限)。互联网上其他任何地方都没有其他OAuth2服务(我个人编写的代码可以轻松实现30个OAuth2实施),您可以使用相同的代码多次调用令牌检索服务,但不会收到错误。这完全违背了所有默认预期,并且这是一个重大的文档失败,它不能更明确地说明是偏离标准实践。

我再说一遍:在整个互联网上没有其他地方你可以多次使用相同的OAuth2代码来检索访问令牌。这是应该在文档上突出显示的内容,而不是。

如果您仍然遇到此问题,则应使用返回的OAuth2代码执行此操作:

  1. 使用代码获取访问令牌令牌并添加请求参数“resource”=“https://api.office.com/discovery/”(结束斜杠很重要)
  2. 使用为步骤1中收到的令牌设置的Authorization标头调用网址https://api.office.com/discovery/v2.0/me/services。这将返回一个JSON对象,其中 value字段将是一个服务数组,此代码将返回访问权限。值数组中的每个对象都将具有serviceResourceId属性。
  3. 对于每个对象,您必须使用在步骤#1中使用的SAME代码获取另一个访问令牌,但资源设置为serviceResourceId。
  4. 步骤3中的代码实际上将授予您访问所需租户端点的权限。 3.

答案 1 :(得分:0)

我会尝试更改"接受"标题为" application / json; odata.metadata = minimal"。 odata.metadata = none不会出现在Unified API支持的MIME类型列表中。

Fiddler中返回的受支持类型 ' application / json; odata.metadata = minimal; odata.streaming = true; IEEE754Compatible = false,application / json; odata.metadata = minimal; odata.streaming = true; IEEE754Compatible = true,application / json; odata。 metadata = minimal; odata.streaming = true,application / json; odata.metadata = minimal; odata.streaming = false; IEEE754Compatible = false,application / json; odata.metadata = minimal; odata.streaming = false; IEEE754Compatible = true, application / json; odata.metadata = minimal; odata.streaming = false,application / json; odata.metadata = minimal; IEEE754Compatible = false,application / json; odata.metadata = minimal; IEEE754Compatible = true,application / json; odata。 metadata = minimal,application / json; odata.metadata = full; odata.streaming = true; IEEE754Compatible = false,application / json; odata.metadata = full; odata.streaming = true; IEEE754Compatible = true,application / json; odata。 metadata = full; odata.streaming = true,application / json; odata.metadata = full; odata.streaming = false; IEEE754Compatible = false,application / json; odata.metadata = full; odata.strea明= FALSE; IEEE754Compatib ...'不匹配任何可接受的MIME类型' application / json;的OData =冗长'