我尝试使用Office 365统一API(预览)制作一些有趣的东西,并坚持授权。 我用我需要的所有权限创建了应用程序
我尝试使用网址登录用户 " 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。
BUT!我有问题,我无法获得有关用户的任何信息,也无法获取他的文件。
我总是只获得HTTP状态401 Unauthorized。
我做错了什么?
ALSO 有关统一API的可能性的问题。我的目标是上传大文件(最大1GB)。是否可以使用统一的API?我在文档中找不到任何内容,但我发现使用OneDrive for Business API是不可能的(最大文件大小为100MB)。
答案 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代码执行此操作:
步骤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 =冗长'