Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Office365 Office 365统一API(预览)请求401错误_Office365_Azure Active Directory_Onedrive_Office365api - Fatal编程技术网

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

Office365 Office 365统一API(预览)请求401错误,office365,azure-active-directory,onedrive,office365api,Office365,Azure Active Directory,Onedrive,Office365api,我正在尝试使用Office 365统一API(预览版)制作一些有趣的东西,并坚持使用授权。 我用我需要的所有权限创建了应用程序 我正在尝试使用URL登录用户 “{CLIENT_ID}&resource=” 一切都很好 我甚至可以通过请求获得所有作用域的访问令牌 但是!我有问题,我不能得到任何关于用户的信息,也不能得到他的文件 我试着提出这样的要求: 我总是得到未经授权的HTTP状态401 我做错了什么 同时 关于统一API的可能性的问题。我的目标是上传大文件(高达1GB)。是否可以使用统一

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

我正在尝试使用URL登录用户 “{CLIENT_ID}&resource=”

一切都很好

我甚至可以通过请求获得所有作用域的访问令牌

但是!我有问题,我不能得到任何关于用户的信息,也不能得到他的文件

我试着提出这样的要求:

我总是得到未经授权的HTTP状态401

我做错了什么

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

我会尝试将“Accept”标题更改为“application/json;odata.metadata=minimal”。odata.metadata=none未出现在统一API支持的MIME类型列表中

Fiddler中返回的受支持类型
'应用程序/json;元数据=最小值;odata.streaming=true;IEEE754Compatible=false,应用程序/json;元数据=最小值;odata.streaming=true;IEEE754Compatible=true,application/json;元数据=最小值;odata.streaming=true,application/json;元数据=最小值;odata.streaming=false;IEEE754Compatible=false,应用程序/json;元数据=最小值;odata.streaming=false;IEEE754Compatible=true,application/json;元数据=最小值;odata.streaming=false,application/json;元数据=最小值;IEEE754Compatible=false,应用程序/json;元数据=最小值;IEEE754Compatible=true,application/json;元数据=minimal,application/json;元数据=full;odata.streaming=true;IEEE754Compatible=false,应用程序/json;元数据=full;odata.streaming=true;IEEE754Compatible=true,application/json;元数据=full;odata.streaming=true,application/json;元数据=full;odata.streaming=false;IEEE754Compatible=false,应用程序/json;元数据=full;odata.streaming=false;IEEE754 Compatib…“不匹配任何可接受的MIME类型”应用程序/json;odata=verbose'

因此,今天早些时候也遇到了同样的问题:总是出现401个未经授权的错误或其他错误。然后我偶然发现了这个答案:

就是这样:这与直觉大相径庭,但答案是,在获取发现URL的令牌并执行服务发现之后,您需要为要调用的每个serviceResourceId获取令牌。这里有两个非常重要的要点,几乎8个小时的阅读文档并不能清楚地表明这一点

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

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

您可以使用相同的代码多次调用令牌检索服务

这是难以置信的违反直觉的(我故意用粗体大写)。在Internet上的任何地方都没有其他OAuth2服务(我个人编写了30个OAuth2实现的代码),您可以使用相同的代码多次调用令牌检索服务,而不会收到错误。这完全违背了所有的默认预期,这是一个重大的文档失败,它没有更清楚地描述为偏离标准实践

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

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

  • 使用代码获取访问令牌,并添加请求参数“resource”=“”(结束斜杠很重要)
  • 调用url“使用在步骤#1中接收到的令牌设置的授权头”。这将返回一个JSON对象,带有一个字段。值字段将是一个服务数组,该代码将为其返回访问令牌。值数组中的每个对象都有一个serviceResourceId属性
  • 对于每个对象,您必须使用步骤#1中使用的相同代码获取另一个访问令牌,但资源设置为serviceResourceId
  • 步骤#3中的代码实际上将授予您访问所需租户端点的权限。
    3.

    您可以添加更多关于您正在添加的特定作用域的信息吗?用于访问用户的信息用户。需要读取(至少)。要访问用户的文件,您需要files.Read。现在您将无法上载大文件,该功能很快就会出现。我尝试添加所有作用域,但无效。嗨,Kardanov,您能告诉我以下链接是否适用于您吗?嗨,Kardanov-您选择的新权限是否显示在访问令牌中?权限你需要的是Files.Read(per Yina)和User.Read(登录并读取用户配置文件)。这个问题解决了还是仍然存在?Dan,Shawn:看到相同的错误。在JSON中我有“scope”:“MyFiles.Read MyFiles.Write Userprofile.Read”“我尝试了各种复选框组合,要么获得同意失败,要么获得成功,但似乎无法获得适用于统一API或SharePoint Online API的令牌。有没有简单地说“使用sharepoint api编写并添加此应用程序并选中此框”的文档?因为这将是一个巨大的帮助:我今天花了几个小时试图找出权限的神奇组合