SharePoint API: 无效的访问令牌资源

SharePoint API: Invalid Access Token Resource

我正在尝试获取用于 SharePoint Rest 的访问令牌 API。对于我的组织基地站点。我能够获得令牌并使用该令牌成功发出后续请求。

接下来,我按照相同的过程为不同的站点创建了更多应用权限{{tenant removed}}/sites/testsite。我最初无法创建令牌请求,因为资源参数无效(见下图):

根据 URI 编码标准,我将站点 url 中的“/”替换为“%2f”,并且我能够获得令牌(见下图):

接下来,使用该令牌发送给 API 的请求失败:

{
"error_description":
"Exception of type 'Microsoft.IdentityModel.Tokens.AudienceUriValidationFailedException' was thrown."
}

在响应中header:

3000003;reason="Invalid audience Uri '00000003-0000-0ff1-ce00-000000000000/{{tenant removed}}%2fsites%2f{{removed}}@{{realm removed}}'.";category="invalid_client"

我是否对资源进行了错误编码?我错过了什么?如何使用此方法从其他站点获取信息?

我可以看到许多开发人员在创建请求时做出相同的假设,因为几乎所有文档都没有指出这种情况。只要资源采用有效的 uri 格式,您就能够成功获取该站点的令牌,没有对 uri 本身进行验证。即使您获得了令牌,它也不适用于任何请求。

获取子站点的访问令牌时(即:{{tenant}}/sites/testsite)。请求体的资源部分不需要修改。

因此,例如,当您获得 test.sharepoint.com/sites/testsite 的令牌时,请求正文的 resource 应该只是:

00000003-0000-0ff1-ce00-000000000000/test.sharepoint.com@{{realm}}(没有/sites/testsite

但是,当您使用令牌向 API 发出 HTTP 请求时,您应该使用完整的站点名称。示例:

https://test.sharepoint.com/sites/testsite/_api/web/