Javascript 节点中的Kerberos包返回空响应

Javascript 节点中的Kerberos包返回空响应,javascript,node.js,kerberos,spnego,negotiate,Javascript,Node.js,Kerberos,Spnego,Negotiate,首先,感谢您的观看/帮助 我试图在节点中的npm包中使用initializeClient函数。我的目标是能够向我们的内部API发出请求 const kerberos = require('kerberos') var company = 'company' var service = `HTTP/internal.${company}.com@SERVER.${company.toUpperCase()}.COM` var options = { principal: `firstname@S

首先,感谢您的观看/帮助

我试图在节点中的npm包中使用initializeClient函数。我的目标是能够向我们的内部API发出请求

const kerberos = require('kerberos')

var company = 'company'
var service = `HTTP/internal.${company}.com@SERVER.${company.toUpperCase()}.COM`
var options = { principal: `firstname@SERVER.${company.toUpperCase()}.COM` }

kerberos.initializeClient(service, options, (err, details) => {
    console.log(details)
})
得到的答复是:

KerberosClient {
  contextComplete: false,
  responseConf: 0,
  response: null,
  username: null
}
从这个函数的工作原理来看,您可以将服务、选项(包括主体)和回调函数传递给它

函数似乎正在工作,但没有返回任何数据。我还尝试传递一个空对象作为选项,看起来它只是从机器中提取当前票据,这是首选

我在macOS 10.14上运行这个,节点是v12.4.0。我已经安装了自制的krb5

问题是,为什么这不会返回任何预期结果(还不确定预期结果),这是使用Kerberos票证进行协商请求的正确路径吗


再次感谢

因此,结果是预期的。我不知道您必须对我们的服务器发出任何未经授权的请求才能取回
www-congregate
标题。然后可以将详细信息中提供的字符串与step()函数一起使用

const request=require('request'))
常量kerberos=require('kerberos')
常量{hostname}=require('./env')
const service=`HTTP@${hostname}`
常量url=`https://${hostname}`
//创建Kerberos令牌并交换XSRF令牌。
函数getXSRF(){
返回新承诺((解决、拒绝)=>{
request.get(url,()=>{
const mechOID=kerberos.GSS_MECH_OID_KRB5
//发送未经身份验证的请求
kerberos.initializeClient(服务,{mechiod},(错误,客户端)=>{
如果(错误){
拒绝(错误)
}否则{
//生成第一个Kerberos令牌
客户端。步骤(“”,(错误,kerberosToken)=>{
如果(错误){
拒绝(错误)
}否则{
变量选项={
网址,
标题:{
授权:`谈判${kerberosToken}`
}
}
//附加Kerberos令牌并重新发送回主机
获取(选项,(错误,响应)=>{
如果(错误){
拒绝(错误)
}否则{
var result={xsrf:JSON.parse(response.body).xsrf,kerberos:kerberosToken}
解决(结果)
}
})
}
})
}
})
})
})
}
module.exports={
getXSRF:getXSRF

}
需要指出的一点是,当我在终端中执行
kdestory
时,响应返回为空,当我执行
kinit
时,它返回上面的响应。这意味着initializeClient函数确实可以在我的机器上看到我的keytab文件。