将NodeJ连接到MarkLogic as SAML时发生UTF-8转义序列错误

将NodeJ连接到MarkLogic as SAML时发生UTF-8转义序列错误,marklogic,Marklogic,我正在尝试使用SAML将NodeJS程序连接到MarkLogic。下面是代码片段 var mytoken = fs.readFileSync('./token.token', 'ascii'); //mytoken = utf8.encode(mytoken); console.log(mytoken); var options = { port: '8060', authType: 'saml', ssl: true, token: mytoken, k

我正在尝试使用SAML将NodeJS程序连接到MarkLogic。下面是代码片段

var mytoken = fs.readFileSync('./token.token', 'ascii');
//mytoken = utf8.encode(mytoken);
console.log(mytoken);
var options = {
    port: '8060',
    authType: 'saml',
    ssl: true,
    token: mytoken,
    key: fs.readFileSync('./certs/localhost.key', 'ascii'),
    cert: fs.readFileSync('./certs/localhost.crt', 'ascii')
  };

  var db = marklogic.createDatabaseClient(options);
  db.documents.query(
    qb.where(
      qb.term('water')
    )).result(function(response) {
      console.log(JSON.stringify(response, null, 2));
    });

下面是我得到的错误

body: {
    errorResponse: {
      statusCode: 500,
      status: 'Internal Server Error',
      messageCode: 'INTERNAL ERROR',
      message: 'XDMP-UTF8SEQ: Invalid UTF-8 escape sequence . See the MarkLogic server error log for further detail.'
    }
  }
}
  • 我的代币是正确的。我已经在jwt.ms中进行了测试
  • SSL证书工作正常。我使用auth类型“Digest”进行了测试,并且能够连接
  • 我试着在代币前加上持票人:但没有帮助
  • 我在控制台上打印了令牌,打印得很好

  • 谢谢你在这方面的帮助。如果有任何线索,我将不胜感激。

    您正在以ascii
    cert:fs.readFileSync('./certs/localhost.crt','ascii')读取文件。
    您是否尝试过使用UTF-8编码读取内容:
    编码:'utf8'
    ?我尝试了以下两种方法,但均无效。var mytoken=fs.readFileSync('./token.token','utf8');我还尝试安装npm库utf8,并尝试了以下代码。mytoken=utf8.encode(mytoken);SAML令牌必须是base 64编码的。如果token.token文件是从JWT有效负载生成的,则它必须以与IDP中SAMLResponse表单字段的值相同的方式对SAML令牌进行编码。谢谢Ehennum。我想,我明白你的意思了。让我试着做几件事,然后再告诉你更多细节。非常感谢。@ehennum非常感谢!你是个救生员。这对我有用。我在开发两个不同的应用程序。1.反应JS2。节点JS。我使用React应用程序对Azure AD进行身份验证,获取令牌,在节点JS中手动复制粘贴令牌。我犯了一个愚蠢的错误。我的REACT应用程序没有为我获取SAML令牌,而是身份验证令牌。在我读了你的评论之后,我得到了线索。我做了一些改变,使用了工具名“SAML tracer”,得到了SAML标记,它对我来说就像一个符咒。非常感谢。您正在以ascii
    cert:fs.readFileSync('./certs/localhost.crt','ascii')
    的形式读取文件。您是否尝试过使用UTF-8编码读取内容:
    编码:'utf8'
    ?我尝试了以下两种方法,但均无效。var mytoken=fs.readFileSync('./token.token','utf8');我还尝试安装npm库utf8,并尝试了以下代码。mytoken=utf8.encode(mytoken);SAML令牌必须是base 64编码的。如果token.token文件是从JWT有效负载生成的,则它必须以与IDP中SAMLResponse表单字段的值相同的方式对SAML令牌进行编码。谢谢Ehennum。我想,我明白你的意思了。让我试着做几件事,然后再告诉你更多细节。非常感谢。@ehennum非常感谢!你是个救生员。这对我有用。我在开发两个不同的应用程序。1.反应JS2。节点JS。我使用React应用程序对Azure AD进行身份验证,获取令牌,在节点JS中手动复制粘贴令牌。我犯了一个愚蠢的错误。我的REACT应用程序没有为我获取SAML令牌,而是身份验证令牌。在我读了你的评论之后,我得到了线索。我做了一些改变,使用了工具名“SAML tracer”,得到了SAML标记,它对我来说就像一个符咒。多谢。