.net 从dotnet核心应用程序验证Sharepoint Online REST API

.net 从dotnet核心应用程序验证Sharepoint Online REST API,.net,rest,sharepoint,core,.net,Rest,Sharepoint,Core,我有一个现有的PHP工具,我正在dotnet core 3.0中重写它,它可以浏览Sharepoint Online、Exchange Online和OneDrive上的数据 它有一个应用程序注册,我已经批准用于访问各个租户,然后该工具使用oauth调用使用应用程序流来获取访问令牌,以便在调用中读取数据等 我遇到的问题是在dotnet core中生成一个访问令牌,以便使用REST访问Sharepoint online。将机密ClientApplicationBuilder与我的客户端id、sec

我有一个现有的PHP工具,我正在dotnet core 3.0中重写它,它可以浏览Sharepoint Online、Exchange Online和OneDrive上的数据

它有一个应用程序注册,我已经批准用于访问各个租户,然后该工具使用oauth调用使用应用程序流来获取访问令牌,以便在调用中读取数据等

我遇到的问题是在dotnet core中生成一个访问令牌,以便使用REST访问Sharepoint online。将机密ClientApplicationBuilder与我的客户端id、secret等一起使用,然后调用AcquireTokenForClient的技术似乎对Exchange Online EWS和Graph有效,但对Sharepoint Online无效,该响应包含“不受支持的仅应用程序令牌”

我的PHP代码也包含一个JWT作为“client_断言”,我发现下面的文章中的代码似乎与我的PHP代码的步骤非常相似:(我很感激这段代码是关于Azure认证的,但是声明的结构看起来与JWT代码的PHP结构非常相似。我认为这段代码假设我们在私有存储中有一个带有私钥的证书)

我已经尝试使用System.IdentityModel.Tokens.Jwt做了类似的工作(并非本文中的所有类都在core中提供)在解决了几个难题后,最终能够创建JWT令牌,但当用于生成访问令牌并调用租户时,它返回401访问被拒绝。这可能是我用来将令牌组合在一起的代码中的十几个位置之一,因为我没有确切的示例来说明我正在尝试做什么

我特别感兴趣的是在Sharepoint中使用REST,因为它支持Graph v1不支持的某些操作,我不想使用Graph beta,而且我知道在Core上有一些CSOM端口可以运行,但我不愿意这样做

因此,我想找到一个解决以下约束的示例: *在C#中作为“netcoreapp3.0”应用程序运行 *使用REST api连接到SharepointOnline *对于签署JWT所需的证书,我有一个证书文件、私钥文件和thumb文件 *我正在尝试运行应用注册允许的操作,如“列出根站点详细信息” *我已经有租户url、id、应用程序注册客户端id和客户端密码

有人给我举个好例子,或者让我知道任何可能的“抓到”吗