资源上不存在范围“allsites.write”

问题描述

我正在尝试通过桌面应用程序设置对公司 Sharepoint Online 网站的编程访问。我的组织订阅了 Office 365。

我已在 Azure 门户中设置了一个注册的应用程序,并授予了 AllSites.Write 权限:

Azure portal shot

现在,我正在尝试导航到浏览器控件中的以下 URL:

URL = "https://login.microsoftonline.com/" + Tenant + "/oauth2/v2.0/authorize?" +
    "client_id=" & ClientID +
    "&response_type=code" +
    "&redirect_uri=foo%3A%2F%2Fback" +
    "&response_mode=query" +
    "&scope=user.read%20allsites.write"

一旦我这样做,就没有 UI,我立即收到带有以下错误消息的回调:

AADSTS650053:应用程序“MyApp”请求资源“00000003-0000-0000-c000-000000000000”上不存在的范围“allsites.write”。联系应用供应商。

范围就在那里。我错过了什么?

相同的登录流程适用于略有不同的范围 (Sites.ReadWrite.All),但后来我发现 Graph API 没有公开 SharePoint 列表项附件,并决定回退到旧版 SharePoint REST API。更改了门户上的范围,更改了登录 URL 中的范围,出现错误

陈旧的登录会话不会妨碍,是吗?通常,当范围改变时,OAuth UI 会弹出权限窗口,不是吗?

解决方法

已解决此错误,但现在 Sharepoint Online 不接受我的令牌,显示“发行人或签名无效”。作为记录,当我提供范围 https://microsoft.sharepoint-df.com/AllSites.Writehttps://{mytenant}.sharepoint.com/AllSites.Write 时,登录流程有效。


更新:现在接受。为此,我必须使用旧版本的 OAuth 端点:https://login.microsoftonline.com/{tenant}/oauth2/authorize 用于启动登录流程,https://login.windows.net/{tenant}/oauth2/token?api-version=1.0 用于交换令牌代码。后者采用 resource 参数,即 https://{tenant}.sharepoint.com

https://login.microsoftonline.com/{tenant}/oauth2/v2.0/token 处的端点,在 Graph 文档中都指定了,不采用 resource 参数,这在这里似乎是必不可少的(或者它可能被称为其他东西)。>

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...