Учебники

Koa.js — Аутентификация

Аутентификация — это процесс, в котором предоставленные учетные данные сравниваются с данными в файле в базе данных авторизованных пользователей в локальной операционной системе или на сервере аутентификации. Если учетные данные совпадают, процесс завершается, и пользователю предоставляется авторизация для доступа.

Мы создадим очень простую систему аутентификации, которая будет использовать базовую аутентификацию HTTP . Это самый простой способ обеспечить контроль доступа, поскольку он не требует файлов cookie, сеансов или чего-либо еще. Чтобы использовать это, клиент должен отправить заголовок авторизации вместе с каждым запросом, который он делает. Имя пользователя и пароль не шифруются, а объединяются в одну строку, как показано ниже.

username:password

Эта строка кодируется с помощью Base64, и перед этим значением ставится слово Basic. Например, если ваше имя пользователя Ayush и пароль India, строка «Ayush: India» будет отправлена ​​в виде закодированного в заголовке авторизации.

Authorization: Basic QXl1c2g6SW5kaWE=

Для реализации этого в вашем приложении koa вам понадобится промежуточное программное обеспечение koa-basic-auth. Установите его, используя —

$ npm install --save koa-basic-auth

Теперь откройте файл app.js и введите в него следующий код.

//This is what the authentication would be checked against
var credentials = { name: 'Ayush', pass: 'India' }

var koa = require('koa');
var auth = require('koa-basic-auth');
var _ = require('koa-router')();

var app = koa();

//Error handling middleware
app.use(function *(next){
   try {
      yield next;
   } catch (err) {
      if (401 == err.status) {
         this.status = 401;
         this.set('WWW-Authenticate', 'Basic');
         this.body = 'You have no access here';
      } else {
         throw err;
      }
   }
});

// Set up authentication here as first middleware. 
// This returns an error if user is not authenticated.
_.get('/protected', auth(credentials), function *(){
   this.body = 'You have access to the protected area.';
   yield next;
});

// No authentication middleware present here.
_.get('/unprotected', function*(next){
   this.body = "Anyone can access this area";
   yield next;
});

app.use(_.routes());
app.listen(3000);

Мы создали промежуточное программное обеспечение для обработки ошибок для обработки всех ошибок, связанных с аутентификацией. Затем мы создали 2 маршрута —

  • / protected — доступ к этому маршруту возможен только в том случае, если пользователь отправляет правильный заголовок аутентификации. Для всех остальных это даст ошибку.

  • / unprotected — доступ к этому маршруту может получить любой, с аутентификацией или без нее.

/ protected — доступ к этому маршруту возможен только в том случае, если пользователь отправляет правильный заголовок аутентификации. Для всех остальных это даст ошибку.

/ unprotected — доступ к этому маршруту может получить любой, с аутентификацией или без нее.

Теперь, если вы отправите запрос в / protected без заголовка аутентификации или с неправильными учетными данными, вы получите ошибку. Например,

$ curl https://localhost:3000/protected

Вы получите ответ как —

HTTP/1.1 401 Unauthorized
WWW-Authenticate: Basic
Content-Type: text/plain; charset=utf-8
Content-Length: 28
Date: Sat, 17 Sep 2016 19:05:56 GMT
Connection: keep-alive

Please authenticate yourself

Однако с правильными учетными данными вы получите ожидаемый ответ. Например,

$ curl -H "Authorization: basic QXl1c2g6SW5kaWE=" https://localhost:3000/protected -i

Вы получите ответ как —

HTTP/1.1 200 OK
Content-Type: text/plain; charset=utf-8
Content-Length: 38
Date: Sat, 17 Sep 2016 19:07:33 GMT
Connection: keep-alive

You have access to the protected area.

/ Незащищенный маршрут по-прежнему доступен для всех.