Аутентификация — это процесс, в котором предоставленные учетные данные сравниваются с данными в файле в базе данных авторизованных пользователей в локальной операционной системе или на сервере аутентификации. Если учетные данные совпадают, процесс завершается, и пользователю предоставляется авторизация для доступа.
Мы создадим очень простую систему аутентификации, которая будет использовать базовую аутентификацию 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.
/ Незащищенный маршрут по-прежнему доступен для всех.