我们有一个用例,我们从IIS Web服务器托管到NodeJS应用程序服务器的ReactJS UI(从浏览器)并行调用多个API。在NodeJS应用服务器中,我们编写了授权表达中间件,该中间件使用外部API进行授权检查,以查看登录用户是否被授权,如果被授权,我们将向后端调用进一步的API调用以获取数据或其他中间件由于用户说用户未经授权再进行API调用,因此正在返回响应。
现在,我们正在尝试为授权API调用添加基于kerberos的身份验证,并在后端进一步进行API调用。
当我们尝试将下面工作的Kerberos NodeJS代码片段(Kerberos authentication in Node.js https.get or https.request)添加到中间件和后端数据API调用中的授权API调用时,我们遇到错误。
const kerberos = require('kerberos').Kerberos;
const fetch = require('node-fetch');
(async () => {
const client = await kerberos.initializeClient("HTTP@site.internal.net", {
mechOID: kerberos.GSS_MECH_OID_SPNEGO,
})
const ticket = await client.step("")
const resp = await fetch("https://site.internal.net/api/v1/hello", {
headers: {
'Authorization': 'Negotiate ' + ticket
}
})
console.log(await resp.json())
})();
在工作代码上方并行调用时,我们会收到此错误:
[错误:AcquireCredentialsHandle:安全软件包中没有可用的凭据
和401未经授权的请求错误
此外,当在for循环内多次调用kerberos.initializeClient&ticket = client.step(“”)代码时,我们已经注意到上述错误,它在5中失败了2或3次,并抛出了以上错误。
有人可以解释上述错误的含义以及如何避免该错误吗?
预先感谢