从IBM Cloud Function中的Node.js访问Sharepoint文档

Jam*_*mes 6 sharepoint node.js ibm-cloud-functions

我正在尝试从Node.js编写的IBM Cloud Function访问botshop.cloudappsportal.com上托管的Sharepoint文件中的一些表数据.

我可以在站点上访问Sharepoint的REST API,但身份验证失败.我的理解是,Sharepoint使用了一些复杂的Microsoft身份验证.

这是Node.js代码,

const request = require('request-promise');

function main(params) {
    var options = {
      uri: "http://xxx.botshop.cloudappsportal.com/_api/web/lists/getbytitle('myfile')/items",
      method: 'GET',
      auth: {
        'user': 'myuser@botshop.cloudappsportal.com',
        'pass': 'password'
      }
    }
    return request.get(options).then(response => {
        return response;
    });
}

exports.main = main;
Run Code Online (Sandbox Code Playgroud)

在提示输入用户名/密码后,我可以从浏览器访问该URL.

我也可以使用NTCredentials类从Java访问它.

HttpGet request = new HttpGet("http://xxx.botshop.cloudappsportal.com/_api/web/lists/getbytitle('myfile')/items");
HttpParams httpParams = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(httpParams, 1000);
HttpConnectionParams.setSoTimeout(httpParams, 1000);
DefaultHttpClient client = new DefaultHttpClient(httpParams);
client.getCredentialsProvider().setCredentials(
    new AuthScope(AuthScope.ANY),
    new NTCredentials("myuser@botshop.cloudappsportal.com", "password", "", ""));
HttpResponse response = client.execute(request);
Run Code Online (Sandbox Code Playgroud)

普通的UsernamePasswordCredentials在Java中不起作用,因此我需要Node.js中的NTCredentials(在IBM Cloud Functions中有效).有任何想法吗?

同样奇怪的是,域的额外参数只是""""有效,奇怪的是当它不传递任何额外的有用数据时需要NTCredentials.

Gau*_*eth 3

您可以利用这个优秀的node-sp-auth库通过不同的方式通过nodejs对SharePoint进行身份验证。

它支持通过用户凭据进行身份验证。它使用 http ntlm 握手来获取身份验证标头。

例如:

import * as spauth from 'node-sp-auth';
import * as request from 'request-promise';

spauth
  .getAuth('http://xxx.botshop.cloudappsportal.com/', {
    username: 'administrator',
    password: '[password]',
    domain: 'sp'
  })
  .then(data =>{
    let headers = data.headers;
    headers['Accept'] = 'application/json;odata=verbose';
    let requestOpts = data.options;
    requestOpts.json = true;
    requestOpts.headers = headers;
    requestOpts.url = 'http://xxx.botshop.cloudappsportal.com/_api/web/lists/getbytitle('myfile')/items';

    request.get(requestOpts).then(response => {
      console.log(response.d.Title);
    });
});
Run Code Online (Sandbox Code Playgroud)

参考 -node -sp-auth -nodejs 到 SharePoint 无人值守 http 身份验证

SharePoint 本地用户凭据身份验证

此外,如果您不想通过用户名/密码进行身份验证,您可以使用客户端 ID 和密钥,然后使用它们对 SharePoint 进行身份验证,如下面的链接所述。虽然它是为 SPO 编写的,但当您遵循类似的步骤时,它也应该适用于本地环境

仅 SharePoint Online 加载项身份验证