【问题标题】:curl request to Microsoft Sharepoint API?对 Microsoft Sharepoint API 的 curl 请求?
【发布时间】:2015-04-11 12:37:13
【问题描述】:

是否有一种简单的方法可以使用对 REST API 的 cURL 请求来访问我的 Sharepoint 帐户上的文件?例如

curl -i -H "Authorization: Bearer <some-key-here>" https://mysharepoint.com/_api/web/Lists

我已阅读有关authentication and authorization for apps 的所有文档,但在这种情况下,我没有可以注册的“应用程序”。我只需要某种 API 密钥就可以在 REST 请求中使用。如何以这种方式使用 REST API?

感谢您对此问题的任何见解。

【问题讨论】:

    标签: rest sharepoint curl sharepoint-2013 sharepoint-api


    【解决方案1】:

    创建一个 bash 脚本:

    $ nano get_access_token.sh
    

    将下一个内容粘贴到其中,将YourTenantclient_idclient_secret 更改为您自己的值(您可以在下面的 Sharepoint 部分中获取)。

    wwwauthenticate=$(curl -i -H "Authorization: Bearer" -s "https://YourTenant.sharepoint.com/_vti_bin/client.svc/" | grep -i "www-authenticate")
    bearer_realm=$(echo $wwwauthenticate | awk -F"," '{print $1}' | awk -F"=" '{print $2}' | tr -d '"')
    app_id=$(echo $wwwauthenticate | awk -F"," '{print $2}' | awk -F"=" '{print $2}'  | tr -d '"')
    
    grant_type="grant_type=client_credentials"
    cl_id="client_id=c2xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx@$bearer_realm"
    cl_secret="client_secret=3zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz"
    res="resource=$app_id/YourTenant.sharepoint.com@$bearer_realm"
    url="https://accounts.accesscontrol.windows.net/$bearer_realm/tokens/OAuth/2"
    content_type="Conent-Type: application/x-www-form-urlencoded"
    
    access_token=$(curl -X POST -H $content_type --data-urlencode $grant_type --data-urlencode $cl_id --data-urlencode $cl_secret --data-urlencode $res -s $url | awk -F":" '{print $NF}' | tr -d '"}')
    
    echo $access_token
    

    应用适当的权限:chmod 700 get_access_token.sh

    您可以将curl 与该令牌一起使用:

    curl -i -H "Authorization: Bearer $(./get_access_token.sh)" -H "Accept: application/json;odata=verbose" -s "https://YourTenant.sharepoint.com/_api/web"

    您可以将./ 替换为脚本的完整路径。

    Sharepoint 部分:

    1. 通过以下方式注册新应用程序
      • 关注https://YourTenant.sharepoint.com/_layouts/15/appregnew.aspx链接
      • 生成 Client Id 和 ** Client Secret** 值
      • 填写 TitleApp DomainRedirect URI 字段(我已输入 localhost.com,如图所示 - 可以)
      • 点击创建按钮
    2. 将下一个参数保存到文件中:

      The app identifier has been successfully created.
      Client Id:      898c898f-89238-43d0-4b2d-7a64c26f386a
      Client Secret:  4/T+21I1DSoAJdOX9DL1Ne4KssEaP7rqb11gdtskhXn=
      Title:          SomeTitle
      App Domain:     localhost.com
      Redirect URI:   https://localhost.com/default.aspx
      
    3. 通过

      向此应用应用权限
      • 关注https://YourTennant.sharepoint.com/sites/SharePointRND/_layouts/15/appinv.aspx
      • Client Id898c898f-89238-43d0-4b2d-7a64c26f386a插入App Id字段
      • 点击查找按钮
      • 粘贴到 Permission Request XML 下一个代码(在我的情况下,我只需要 Read 访问权限,因此我将 Rights 的值从 FullControl 更改为 Read):

        <AppPermissionRequests AllowAppOnlyPolicy="true">
        <AppPermissionRequest Scope="http://sharepoint/content/sitecollection/web" Right="FullControl" />
        
      • 创建底部按钮点击
      • 相信它按钮点击

    Here's Postman related but similar answer

    【讨论】:

      【解决方案2】:

      如果这仍然相关,这对我有用:

      curl https://mysharepoint.com/_api/web/Lists -v --ntlm --negotiate -u user:password

      您基本上使用 ntlm 进行身份验证(请注意,某些共享点可能需要 Kerberos),然后可以像通过浏览器一样轻松访问 REST API。


      Edit 显然不适用于 Office 365。

      【讨论】:

      • 但这不适用于 Office 365 租户,不是吗?
      • 我认为应该。不幸的是,我现在无法对其进行测试,您能否确认它不起作用或起作用?
      • 我可以确认它不起作用,至少对我来说:Access denied. You do not have permission to perform this action or access this resource.
      猜你喜欢
      • 1970-01-01
      • 2015-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多