我在 Azure AD 中注册了一个 Web 应用程序,并让它与 Graph API 一起使用。但我希望能够查询 Sharepoint REST API。
我已将共享点委托(delegate)权限范围“AllSites.Read”添加到我的应用程序中(除了我之前使用的 Graph API 范围之外),并在获得时请求此范围(除了其他延迟的 msgraph 范围之外)来自用户的 oauth token 。我使用 https://login.microsoftonline.com/common/oauth2/v2.0
成功获取了 token 用于授权/ token 调用,但无法成功查询:
我的查询类似于 client.get(f"https://{tenant}.sharepoint.com/_api/web/lists")
哪里tenant
是我正在使用的 token 的特定用户的租户。
我得到的错误看起来像 {'error_description': 'Invalid issuer or signature.'}
与 reason="Token contains invalid signature.";category="invalid_client"'
在响应的 header 中。
我能够查询 Graph api,但也希望能够查询 Sharepoint REST api,因为 Graph api 不足以满足我的实际用例,即获取 Sharepoint 组(Graph api 确实当我请求组时不提供共享点组,仅提供 Office 365 和 Azure AD 组)。
我没有在 Expose API 中添加任何范围,我不知道是否需要。我不需要这部分来让它与 Graph API 一起工作。
最后我会提到,在 Postman 中,受控环境纯粹以此为请求,使用 OAuth 2.0:
- 验证网址:https://login.microsoftonline.com/common/oauth2/v2.0/authorize
- 访问 token URL:https://login.microsoftonline.com/common/oauth2/v2.0/token
- client_id
- client_secret
- 范围:AllSites.Read
我成功获得了具有所有角色的 token ,尽管它仍然无法让我访问 https://<tenant>.sharepoint.com/_api/web/lists
。我收到以下错误:
"error": {
"code": "-2147024891, System.UnauthorizedAccessException",
"message": {
"lang": "en-US",
"value": "Access denied. You do not have permission to perform this action or access this resource."
}
}
}
诚然,这可能是我之前遇到的无效客户端错误的一个进步,但仍然很困难。
最佳答案
我能够让它在 Postman 中工作:
- OAuth 2.0
- 授权类型:授权代码
- 验证网址:https://login.microsoftonline.com/common/oauth2/v2.0/authorize
- 访问 token URL:https://login.microsoftonline.com/common/oauth2/v2.0/token
- 客户端 ID:
- 客户端 key :
- 范围:https://
.sharepoint.com/AllSites.FullControl
我取回的 token 具有我在应用程序上设置的所有权限,包括 Graph API 权限和我在身份验证请求的 Scope 参数中未请求的 Sharepoint 范围:
"scp": "AllSites.FullControl AllSites.Read Directory.Read.All Files.Read.All Group.Read.All MyFiles.Read Sites.Read.All Sites.Search.All User.Read User.Read.All",
这有点令人惊讶。
一个关键点是在范围内设置租户 URL,以便 aud
token 中的参数返回给正确的租户。它在配置为 resourceAppId
之前返回与 Graph 权限 ( 00000003-0000-0000-c000-000000000000
) 关联,而不是与 Sharepoint 权限关联。这样,aud
设置为https://<tenant>.sharepoint.com
我能够访问 https://<tenant>.sharepoint.com/_api/web/lists
.
关于azure - 如何使用 Azure AD 注册的应用程序查询 Sharepoint REST api(不是 Graph api)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66481828/