如何在NodeJS和Axios上使用Kerberos客户端身份验证进行api调用

时间:2020-05-29 19:36:20

标签: node.js authentication iis axios kerberos

我们有一个用例,我们从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次,并抛出了以上错误。

有人可以解释上述错误的含义以及如何避免该错误吗?

预先感谢

0 个答案:

没有答案