如何使用curl向Microsoft Sharepoint API发送请求?

10

有没有一种简单的方法使用 cURL 请求来访问我在Sharepoint账户上的文件?例如

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

我已阅读有关应用程序的身份验证和授权的所有文档,但在这种情况下,我没有可以注册的“应用程序”。我只需要某种API密钥以在REST请求中使用。我该如何以这种方式使用REST API?
我很感激任何对这个问题的见解。
2个回答

10
创建一个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. Register a new app by

    • following https://YourTenant.sharepoint.com/_layouts/15/appregnew.aspx link
    • generating Client Id and ** Client Secret** values
    • filling Title, App Domain and Redirect URI fields (I've input localhost.com as on the picture - it works)
    • clicking Create button enter image description here
  2. Save somewhere into file the next parameters:

    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. Apply permissions to this app by

    • following https://YourTennant.sharepoint.com/sites/SharePointRND/_layouts/15/appinv.aspx

    • inserting Client Id: 898c898f-89238-43d0-4b2d-7a64c26f386a into App Id field

    • clicking Lookup button

    • pasting into Permission Request XML the next code (in my case I needed only Read access, so I changed Rights value from FullControl to Read):

      <AppPermissionRequests AllowAppOnlyPolicy="true">
          <AppPermissionRequest Scope="http://sharepoint/content/sitecollection/web" Right="FullControl" />
      </AppPermissionRequests>
      
    • Create bottom button clicking enter image description here

    • Trust it button clicking

这里是与Postman相关但类似的回答


3
如果这个问题仍然存在,以下命令可以解决:
curl https://mysharepoint.com/_api/web/Lists -v --ntlm --negotiate -u user:password
你可以通过NTLM(有些SharePoint可能需要Kerberos)进行认证,然后就可以像在浏览器中一样轻松地访问REST API。
似乎编辑在Office 365中不起作用。

但是这对于 Office 365 租户不起作用,是吗? - reddi.eth
我认为它应该可以。不幸的是,我现在无法测试它,你能否确认它是否工作? - LOLWTFasdasd asdad
4
我可以确认它不起作用,至少对我来说是这样的:“访问被拒绝。您没有执行此操作或访问此资源的权限。” - Gryu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接