资源上不存在范围 "allsites.write"

Scope "allsites.write" doesn't exist on the resource

我正在尝试设置从桌面应用程序对企业 Sharepoint Online 网站的编程访问。我的组织有 Office 365 订阅。

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

现在,我试图在浏览器控件中导航到以下 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: The application 'MyApp' asked for scope 'allsites.write' that doesn't exist on the resource '00000003-0000-0000-c000-000000000000'. Contact the app vendor.

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

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

陈旧的登录会话不会妨碍,不是吗?通常,当范围发生变化时,OAuth UI 弹出权限 window,不是吗?

已解决此错误,但现在 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 参数,这在这里似乎是必不可少的(或者可能称为其他名称)。