Я пытаюсь подключиться к серверу 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);
});
})();