Дайджест-аутентификация с помощью nodejs не работает - PullRequest
0 голосов
/ 10 июля 2019

Я пытаюсь подключиться к серверу monero-rpc, который использует дайджест-проверку подлинности

Однако я всегда получаю 401 - Unauthorized access

Я протестировал функцию calculateResponse - она ​​возвращает тот же хеш, что и Почтальонделает.

Так похоже на проблему с заголовком Authorization и сам запрос, однако я не вижу проблемы.

Вот мой код:

        const http = require("http");
        const crypto = require("crypto");

        // function from class - uses username/pass to calculate response
          calculateResponse(nonce, realm) {
            const MD5 = data =>
              crypto
                .createHash("MD5")
                .update(data)
                .digest("hex");
            const HA1 = MD5(`${this.auth.username}:${realm}:${this.auth.password}`);
            const HA2 = MD5(`${this.options.method}:${this.options.path}`);
            const response = MD5(`${HA1}:${nonce}:00000001:0a4f113b:auth:${HA2}`);
            return response;
          }

        (async function() {
          // this just makes 1 request and parse nonce from www-auth
          const nonce = await getNonce()
          const  response = await calculateResponse(nonce, 'monero-rpc');

          const options = {
            method: "GET",
            url: "http://127.0.0.1:18082/json_rpc",
            headers: {
              "cache-control": "no-cache",
              Authorization: `Digest username="${this.auth.username}", realm="monero-rpc", nonce="${nonce}", uri="/json_rpc", algorithm="MD5", qop=auth, nc=00000002, cnonce="0a4f113b", response="${response}"`,
              "Content-Type": "application/json"
            }
          };

          request(options, (error, response, body) {

            console.log(body);
          });
        })();
...