适用于SharePoint 365 REST的Oauth2

时间:2014-08-04 00:44:55

标签: sharepoint oauth ms-office preview

我尝试使用OAuth2和REST API连接到Sharepoint Online(Sharepoint 365?)内容。我需要从Python执行此操作,因为它是对现有应用程序的补充。我已经设法使用OAuth2和REST将应用程序连接到Google云端硬盘,因此我想我了解使用OAuth2的基本原理。

我尝试了多种场所组合来配置client_id和client_secret,并验证和接收访问权限并刷新令牌。

到目前为止,我已经能够接收刷新令牌并使用它来获取访问令牌;但是,我无法使用访问令牌访问Sharepoint 365站点上的内容。

为了配置client_id和client_secret,我使用Azure管理门户将我的Sharepoint站点与AAD相关联。然后我使用client_id和client_secret将应用程序添加到Sharepoint AD条目。在Sharepoint中,我使用appregnew.aspx注册client_id并验证应用程序是否出现在appprincipals.aspx中。

我使用以下方法调用身份验证服务: ... / login.windows.net/common/oauth2/authorize?api-version=1.0&response_type=code&client_id=&redirect_uri=&resource=Microsoft.Sharepoint

我能够验证,接收代码,回电 ... / login.windows.net/common/oauth2/token包含代码并接收访问和刷新令牌。

我将这些令牌序列化并从单独的进程调用中序列化 ... / login.windows.net/common/oauth2/token,包含refresh_token,client_id,client_secret和grant_type = refresh_token,并接收新的访问令牌。

最后,我调用了Sharepoint服务端点 -my.sharepoint.com/personal//_api/web/files' 使用新的访问令牌,它无法告诉我资源Microsoft.Sharepoint无效(无效的受众Uri' Microsoft.SharePoint')

我一直在旋转我的车轮,尝试配置client_id的各种排列,这就是我所得到的。由于所有文档和示例似乎都依赖于使用诸如TokenHelper之类的C#库,因此我觉得我错过了一些关键但简单但无法找到所需信息的内容。

是否有人使用Python,Ruby,Java等连接到Sharepoint Online?如果是这样的话:

  1. 应该在哪里配置client_id?
  2. 获取刷新和访问令牌的终点是什么?
  3. 请求令牌的适当受众uri或资源是什么?
  4. 非常感谢!

4 个答案:

答案 0 :(得分:6)

我已使用PHP成功连接到SharePoint Online。在我看来,你喜欢结合两种不同的方法来做到这一点。 这是我做的:

appregnew.aspx和appprincipals.aspx页面用于SharePoint的应用程序,但它看起来不像您正在构建一个。

答案 1 :(得分:4)

我认为您尝试从Sharepoint Online执行OAuth而不在Sharepoint中创建加载项。这是我面临的确切问题。我知道这是一个古老的问题,但我的回答可能对来到这里的其他人有帮助。

可以从任何网络应用程序执行OAuth。以下是我博客中的分步说明 -

https://medium.com/@yash_agarwal2/performing-oauth-and-rest-calls-with-sharepoint-online-without-creating-an-add-in-677e15c8d6ab#.6pf4wp83b

高级概述 -

1)通过在此处注册来获取客户ID和秘密 - https://sellerdashboard.microsoft.com/Registration

2)通过以下步骤获取访问令牌,刷新令牌 -

https://msdn.microsoft.com/en-us/library/office/jj687470.aspx

答案 2 :(得分:0)

我可能在晚会上有点迟了,但对于遇到这个问题的人来说,你可以看看SharePoint Oauth App Client lib是如何做到的。

您可能希望查看SPSiteSPAccessToken类。

答案 3 :(得分:0)

我知道这很老,必须处理类似的问题并有2.5个解决方案。

此解决方案专门用于联合登录。

简单的hacky解决方案就像文件的魔术一样:)

  1. 在Windows 10上-最简单的解决方案:

    • 首先使用Internet Exploer / Edge登录到您的共享点。必须是IE / Edge。
    • 然后在“开始”->“运行”对话框或任何Windows资源管理器地址栏中,执行以下操作:\\<your_sharepoint_site.com>@SSL\rest\of_the\path。在主机名后记@SSL
    • 确保将所有正斜杠替换为反斜杠。
    • 这确保您的登录凭据被系统捕获。
    • 然后导航至“此PC”,菜单“计算机->地图网络驱动器”,然后从上方粘贴该相同路径或将您的常规URL https://<your_sharepoint_site.com>/rest/of_the/path粘贴到“地图网络驱动器”的Folder文本字段中。
    • 现在您已将Sharepoint文件夹映射为常规网络驱动器X:\!它使您可以将其视为来自任何程序或编程语言的普通文件系统文件夹。
    • 此解决方案使用WebDav WebClient,默认情况下,您将达到50MB的限制!不用担心follow these steps摆脱束缚的束缚。
  2. 简单的Hacky。

    • 打开浏览器并打开“开发人员工具”。
    • 导航到“开发人员工具”的“网络”标签
    • 使用“网络”选项卡打开登录到共享点站点。
    • 单击任何请求,您将看到每个单独的Request Header都有一个CookieFedAuth=some_very_long_base64_encoded_xml_struct;rtFa=something_else_long
    • 基本上,您需要这两个Cookie FedAuthrtFa
    • 现在,对SharePoint的每个GET POST(curlwget等)请求都只需添加一个值为Cookie的新标题FedAuth=<fedauth-cookie-value>;rtFa=<rtFa-cookie-value>
  3. Programmatic-hacky(例如Windows上的python中的示例),本质上是#2,但cookie操作都是以编程方式完成的。

    • 我们将直接从孩子那里窃取cookie ...我的意思是从Chrome浏览器中
    • 使用chrome浏览器导航到您的Sharepoint并执行所有必要的登录操作。
    • 隐藏cookie gist。抄袭自here
    • 使用Cookie gist
    • Sharepoint REST API智慧hereref here的REST。
  4. 最后打开啤酒,享受您的一天。