Дайджест http-auth с использованием экспресс-js

Я разрабатываю API в Express JS. Я хочу использовать https://github.com/http-auth/http-auth и пытаюсь использовать дайджест-аутентификацию , но я не смог его использовать. Вот мой код:

var app        = require('express')(),
    routes     = require('./routes'),
    bodyParser = require('body-parser'),
    auth       = require('http-auth'); 

app.use(bodyParser.json()); // Soporta json encoded bodies
app.use(bodyParser.urlencoded({ // Soporta encoded bodies
    extended: true
}));

var digest = auth.digest({
    realm: 'prueba',
    file: __dirname + "/usr.pass"
});

app.use(auth.connect(digest));

// Conectamos todas nuestras rutas
app.use('/', routes);

// Levantamos servidor
app.listen(9999, () => {
    Console.log('running');
});

В моем файле usr.pass есть эта строка: jdurini:prueba:88bfcf02e7f554f9e9ea350b699bc6a7 (пароль - это представление MD5 por '2315').

Я использую POSTMAN для вызова своих конечных точек. В этом случае я пробую метод POST для localhost:9999, и каждый раз, когда я пытаюсь, он переходит к событию дайджеста.on('fail').

На вкладке Авторизация я использую эти данные.

Что я делаю не так? Я впервые использую Express, поэтому любой комментарий может быть полезен.

Редактировать 1 - 14 августа

Заголовок авторизации в postman выглядит следующим образом:Digest username="jdurini", realm="prueba", nonce="", uri="/", response="2c01bce3e1980c575fc82e32f9943617", opaque="" . Этот заголовок генерируется автоматически, когда я заполняю форму авторизации:

  • тип: Дайджест-аутентификация
  • имя пользователя: jdurini
  • Область: пруэба
  • Пароль: 2315

Никакие другие заголовки в запросе не используются.


person Juan Carlos Durini    schedule 11.08.2017    source источник


Ответы (1)


Причина

Похоже, возникла проблема с вашим файлом аутентификации.

Солутон

Я только что повторно сгенерировал строку аутентификации с помощью htdigest:

htdigest usr.pass prueba jdurini

и получил что-то вроде этого:

jdurini:prueba:546bb2109e9d875fb486bf90a55fdbd6

И новая версия работает для меня.

Уведомление

Я думаю, вы можете изменить строку Console.log('running') на нижний регистр, так как ваша версия не компилируется для меня.

person gevorg    schedule 12.08.2017
comment
Спасибо за ваш авзер. Я использовал htdigest для создания файла паролей. Но он продолжает возвращать 401 Unauthorized в Postman. - person Juan Carlos Durini; 14.08.2017
comment
Дайте мне больше информации по запросу, заголовки ответов, пожалуйста. - person gevorg; 14.08.2017
comment
для разницы попробуйте с помощью простого браузера, чтобы убедиться, что это не проблема, связанная с конфигурацией Postman. - person gevorg; 14.08.2017
comment
В Хроме работало! Спасибо @gevorg. Как вы думаете, в чем проблема с почтальоном? - person Juan Carlos Durini; 14.08.2017
comment
Проблема в том, что почтальон игнорирует одноразовый номер, отправленный сервером, и жестко кодирует предоставленный вами. - person gevorg; 14.08.2017
comment
см. github.com/postmanlabs/postman-app-support/issues/932, это ошибка почтальона - person gevorg; 14.08.2017
comment
Понятно... Последний вопрос. Какой алгоритм использует htdigest для шифрования паролей? Я думал, что это MD5, но MySQL или эта страница возвращают этот хеш: 546bb2109e9d875fb486bf90a55fdbd6, они возвращают этот: 88bfcf02e7f554f9e9ea350b699bc6a7 . - person Juan Carlos Durini; 14.08.2017
comment
это md5, однако это зависит от того, что вы вводите: utils.md5(${username}:${realm}:${password}) - person gevorg; 14.08.2017
comment
о, понятно... к этим полям применяется MD5... спасибо! - person Juan Carlos Durini; 14.08.2017