Как использовать аутентификацию клиента Kerberos с NodeJS и Ax ios для вызова API - PullRequest
0 голосов
/ 29 мая 2020

У нас есть случай использования, когда мы вызываем несколько API параллельно из ReactJS UI (из браузера), который размещен на веб-сервере IIS, на NodeJS сервер приложений. На сервере приложений NodeJS мы написали промежуточное программное обеспечение авторизации express, которое выполняет проверки авторизации с помощью внешнего API, чтобы узнать, авторизован ли вошедший в систему пользователь или нет. Если авторизован, то мы вызываем дополнительные вызовы API на бэкэнд, чтобы получить data или промежуточное программное обеспечение возвращает ответ, поскольку пользователь сообщает, что пользователь не авторизован для дальнейших вызовов API.

Теперь мы пытаемся добавить аутентификацию на основе Kerberos для вызова API авторизации и последующих вызовов API.

Мы получаем ошибку ниже, когда пытаемся добавить ниже рабочий фрагмент кода Kerberos NodeJS ( Проверка подлинности Kerberos в Node.js https.get или 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 ошибка несанкционированного запроса

Кроме того, мы заметили вышеуказанные ошибки, когда код kerberos.initializeClient & ticket = client.step ("") вызывается несколько раз внутри для L oop, это было сбой 2 или 3 раза из 5 и выдавал вышеуказанную ошибку.

Кто-нибудь может объяснить, в чем смысл вышеуказанной ошибки и как ее избежать ??

Заранее спасибо

...