从dotnet核心应用程序对Sharepoint Online REST API进行身份验证

时间:2019-09-30 12:02:20

标签: .net rest sharepoint core

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

它具有我已批准的用于访问各种租户的应用程序注册,然后该工具通过应用程序流使用oauth调用来获取访问令牌,以用于读取数据等的调用中。

我遇到的问题是在dotnet核心中生成访问令牌以使用REST在线访问Sharepoint。将该技术与我的客户ID,密码等一起使用ConfidentialClientApplicationBuilder然后调用AcquireTokenForClient的技术似乎适用于Exchange Online EWS和Graph,但不适用于Sharepoint Online,该响应包含“不支持的仅应用程序令牌”。

我的PHP代码(包括等效代码)还包含一个JWT,即“ client_assertion”,并且我发现以下文章的代码似乎与PHP代码的执行步骤非常相似:https://docs.microsoft.com/en-us/azure/active-directory/develop/msal-net-client-assertions(感谢该代码是写给Azure的authenticaiton,但声明的构造与JWT代码的PHP构造非常相似。我认为该代码假定我们在具有私钥的私有存储中拥有一个证书)

我尝试使用System.IdentityModel.Tokens.Jwt(并非该文章中的所有类都在核心中可用)进行等效操作,并且在解决了一些难题之后最终能够创建JWT令牌,但是当用于生成访问令牌并在租户上进行呼叫,它返回401访问被拒绝。这可能是我用来将令牌放在一起的代码中的十几个位置之一,因为我没有确切的示例来说明我要做什么。

我特别感兴趣的是将REST与Sharepoint一起使用,因为它支持Graph v1不支持的某些操作,并且我也不想使用Graph beta,而且我知道CSOM的某些端口可以在Core上运行但不想走那条路。

所以我想找到一个解决以下约束的示例: *在C#中作为“ netcoreapp3.0”应用程序运行 *使用REST API连接到SharepointOnline *对于签署JWT所需的证书,我有一个CERTIFICATE文件,PRIVATE KEY文件和thumb文件 *我正在尝试运行诸如注册应用程序允许的“列出根网站详细信息”之类的操作 *我已经有了租户URL,ID,应用程序注册客户端ID和客户端密钥

有人指出我一个很好的例子,还是让我知道任何可能的“陷阱”?

0 个答案:

没有答案
相关问题