Basic Auth в Express.JS

от автора

В Express.JS есть встроенный middleware для авторизации. Если очень хочется заблокировать доступ к приложению — достаточно всего лишь добавить одну строчку в сетап express-приложения:

// Работает синхронно, то есть морозит всю nodeJS app.use(express.basicAuth('username', 'password')); 

Так же middleware поддерживает асинхронный вариант — с коллбэком:

app.use(express.basicAuth(function(user, pass, callback) {   var result = (user === 'testUser' && pass === 'testPass');   callback(null /* error */, result); })); 

Если нужно ограничить доступ только к определенным url’ам — middleware нужно использовать не глобально, а в рамках роутера, то есть так:

var auth = express.basicAuth(function(user, pass, next) {   var result = (user === 'testUser' && pass === 'testPass');   next(null, result); });  app.get('/home', auth, function(req, res) {   res.send('Hello World'); }); 

Если не забираться под капот — на этом можно и закончить. Тех же, кто на диаграмме Венна находится между кругами «Мне интересно, что внутри» и «Я не знаю как работает basic авторизация apache», приглашаю под кат.

basicAutn достался express в наследство от connect. Устроен он достаточно просто. Когда браузер запрашивает страницу у сервера, сервер сообщает браузеру о необходимости авторизации с помощью заголовка «WWW-Authenticate»:

  res.statusCode = 401;   res.setHeader('WWW-Authenticate', 'Basic realm="' + realm + '"');   res.end('Unauthorized'); 

В ответ на это, браузер рисует форму ввода логина и пароля, и, дождавшись ответа, отправляет повторный запрос к серверу. На этот раз запрос уже будет содержать заголовок «Authorization:Basic dXNlcm5hbWU6cGFzc3dvcmQ=», где «dXNlcm5hbWU6cGFzc3dvcmQ=» — это, ни что иное, как строка ‘username:password’. В этом легко убедиться:

var str = new Buffer('dXNlcm5hbWU6cGFzc3dvcmQ=', 'base64').toString() console.log(str) // выведет 'username:password' 

Теперь браузер будет прикреплять эту строку к каждому запросу, а basicAuth будет прилежно проверять, верные ли данные пользователя указаны в запросе. Этот механизм не отличается безопасностью, но есть нужно быстро ограничить доступ к сайту — это вполне может сгодиться.

Исходный код того, что происходит внутри basicAuth можно прочитать в документации к connect.

ссылка на оригинал статьи http://habrahabr.ru/post/201924/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *