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/
我正在尝试获取用于 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/