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

标签 node.js sharepoint 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;

在提示输入用户名/密码后,我可以从浏览器访问该 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);

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

还有一点奇怪的是,域的额外参数只是 """"有效,所以奇怪的是它在不传递任何额外的有用数据时需要 NTCredentials。

最佳答案

您可以利用出色的 node-sp-auth 库通过不同的方式通过 nodejs 向 SharePoint 进行身份验证。

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

例如:

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);
    });
});

引用文献 - node-sp-auth - nodejs to SharePoint unattended http authentication

SharePoint on premise user credentials authentication

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

SharePoint Online addin only authentication

关于node.js - 从 IBM Cloud Function 中的 Node.js 访问 Sharepoint 文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51993317/

相关文章:

node.js - 打包 Node webkit应用程序

Node.js 检查文件是否存在

javascript - 套接字多次发出事件

c# - 如何查询 Sharepoint 列表中每个值的最大 ID?

java - 如何从 Openwhisk Java Action 内部读取文件

node.js - 将我的 noSQL(mongoDB) 数据库与我的 NodeJS 项目连接起来。但它工作得不好

sharepoint - 来自 SPWeb 的计时器作业

sharepoint - 如何将 Web 部件区添加到 SharePoint wiki 页面?

node.js - OpenWhisk 返回整个响应对象而不仅仅是数据

javascript - IBM Cloud Function 不产生输出