javascript - Node 中的 Kerberos 包返回空响应
问题描述
首先,感谢您查看/帮助。
我正在尝试使用Node.js 中 npm的kerberos包中的 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
}
根据我所知道的这个函数的工作原理,你将服务、选项(包括主体)和回调函数传递给它。
似乎该函数正在运行,但没有返回数据。我还尝试将一个空对象作为选项传递,看起来它会从机器中提取当前票证,这是首选。
我在带有 Node v12.4.0 的 macOS 10.14 上运行它。我已经从 homebrew 安装了 krb5。
问题是,为什么这没有返回任何预期的内容(尚不确定预期的内容),这是能够使用 Kerberos 票证发出协商请求的正确路径吗?
再次感谢!
解决方案
所以,结果在意料之中。我不知道您必须向我们的服务器发出任何未经授权的请求才能取回www-negotiate
标头。然后,您可以将详细信息中提供的字符串与 step() 函数一起使用。
const request = require('request')
const kerberos = require('kerberos')
const {hostname} = require('./env')
const service = `HTTP@${hostname}`
const url = `https://${hostname}`
// Creates a Kerberos token and exchanges for an XSRF token.
function getXSRF() {
return new Promise((resolve, reject) => {
request.get(url, () => {
const mechOID = kerberos.GSS_MECH_OID_KRB5
// Send a request un-authenticated
kerberos.initializeClient(service, { mechOID }, (err, client) => {
if (err) {
reject(err)
} else {
// Generate the first Kerberos token
client.step('', (err, kerberosToken) => {
if (err) {
reject(err)
} else {
var options = {
url,
headers: {
Authorization: `Negotiate ${kerberosToken}`
}
}
// Attach the Kerberos token and resend back to the host
request.get(options, (err, response) => {
if (err) {
reject(err)
} else {
var result = {xsrf: JSON.parse(response.body).xsrf, kerberos: kerberosToken}
resolve(result)
}
})
}
})
}
})
})
})
}
module.exports = {
getXSRF: getXSRF
}
此处找到该示例:https ://github.com/mongodb-js/kerberos/blob/master/test/kerberos_tests.js#L79
推荐阅读
- c - 编译时的宏评估?
- elasticsearch - 在 Mysql 中缓存弹性搜索结果?
- java - 多个插入行 PostgreSQL Java Spring Webflux
- c++ - c++ 多拷贝赋值运算符
- neural-network - nn.Functinal vs nn - Pytorch
- css - 等价于宽度:-webkit-fill-available 在内部资源管理器中
- linux - 循环退出并转到 bash 中的下一行
- get - 为什么使用 react-hook 从 API 获取数据不一致?
- postgresql - PostgreSQL 用子查询数据更新数组
- css - 删除css网格中的空白