Перевод статьи Джонатана Сэринга «6 JavaScript User Authentication Libraries for 2019».
«Сделай мне систему аутентификации пользователей за две недели», – в наше время это распространенная фраза среди членов R&D (Research and development) команд. По различным причинам эта задача всегда относилась к числу вещей, заниматься которыми поручают одному разработчику из команды.
И с одной стороны, вы не хотите тратить время на это. А с другой – сомневаетесь, не будет ли лучше, если подобного рода информацию будет обрабатывать ваш собственный, написанный внутри компании сервис.
Все больше команд пытается понять, в каком случае соотношение стоимость/преимущества будет лучшим: со своим собственным решением или с использованием сторонней библиотеки. На эту тему в интернете появляются все новые руководства. Поэтому я решил сделать краткий обзор предлагаемых вариантов. Надеюсь, это поможет кому-нибудь сэкономить время и принять лучшее решение.
1. Passport JS
Библиотека для аутентификации пользователей Passport набрала на GitHub 15 тысяч звезд. Это, пожалуй, самый распространенный способ, к которому прибегают JS-разработчики, решившие использовать для аутентификации стороннюю библиотеку.
Passport предоставляет относительно гибкое и модульное промежуточное ПО для Node.js, которое можно интегрировать в любое веб-приложение на базе Express.
Это также комьюнити-платформа, поддерживающая различные способы аутентификации, такие как логин-пароль, Facebook, Twitter и др. Если вы не хотите реализовывать собственное решение, для начала, вероятно, стоит обратить внимание именно на эту библиотеку. При этом стоит избегать распространенных ошибок.
- Использование с Express: https://github.com/expressjs/session
- Мы используем Bit, чтобы изолировать отдельные компоненты Passport (например, расширения) и использовать их в нескольких наших проектах.
2. Auth0
Это не библиотека, а скорее сервис. Это надежный и при этом быстрый способ выполнить нужную работу. Auth0 это (достаточно большая) стартап-компания, предоставляющая универсальную платформу для аутентификации и авторизации. Подходит для веб-, legacy- и мобильных приложений.
Некоторые говорят, что это решение близко к Plataformatec’s Devise для Ruby on Rails, за исключением того что вы можете подсоединить любое приложение или API на любом языке. Этот сервис имеет больше 100 подготовленных интеграций. Есть «быстрый старт» с Node.js.
3. Permit
Проект Permit набрал на GitHub тысячу звезд. Его цель — предоставить «недогматичную» библиотеку аутентификации для создания Node.js APIs.
Permit дает вам возможность добавить слой аутентификации в любой Node.js API. Он может использоваться с такими фреймворками как Express, Koa, Hapi и Fastify. Подходит для разнообразных видов API, от REST до GraphQL, с этим и связан его «недогматичный» дизайн.
Permit фокусируется на APIs (запросы без сохранения состояния) и поддерживает фреймворки помимо Express. Он активно разрабатывается. Все это делает Permit одним из интересных вариантов.
Примеры можно посмотреть здесь. Вот один с Express:
[javascript]import { Bearer } from ‘permit’
import express from ‘express’
const permit = new Bearer({
basic: ‘username’, // Also allow a Basic Auth username as a token.
query: ‘access_token’, // Also allow an `?access_token=` query parameter.
})
function authenticate(req, res, next) {
// Try to find the bearer token in the request.
const token = permit.check(req)
// No token found, so ask for authentication.
if (!token) {
permit.fail(res)
return next(new Error(`Authentication required!`))
}
// Perform your authentication logic however you’d like…
db.users.findByToken(token, (err, user) => {
if (err) return next(err)
// No user found, so their token was invalid.
if (!user) {
permit.fail(res)
return next(new Error(`Authentication invalid!`))
}
// Authentication succeeded, save the context and proceed…
req.user = user
next()
})
}
const app = express()
app.get(‘/’, (req, res) => {
res.send(‘Some unrestricted content.’)
})
app.get(‘/restricted’, authenticate, (req, res) => {
res.send(‘Restricted content!’)
})
app.listen(3000)[/javascript]
4. Grant


Это новая и многообещающая библиотека, предоставляющая промежуточное ПО Oauth для Express, Koa и Hapi. Поддерживает больше 180 provider-ов, имеет площадку для испытаний в режиме реального времени. Если вы захотите использовать эту библиотеку с вашим собственным private OAuth provider, вы можете указать требуемый ключ самостоятельно. Хотя эта библиотека уже набирает обороты (больше тысячи звезд на GitHub), ресурсы относительно скудны, поэтому применяйте ее с осторожностью.
5. Управление аутентификацией Feathers
Feathers это опенсорсный микросервисный веб-фреймворк для NodeJS. На GitHub у него 11 тысяч звезд. Он дает вам возможность контроля над данными с помощью ресурсов RESTful, сокетов и гибких плагинов.
Feathers также предоставляет модули для управления аутентификацией и авторизацией, которые позволяют вам осуществлять такие вещи как добавление проверки регистрации или сброс забытого пароля.
Идея Feathers в том, чтобы собрать различные методы аутентификации «под одной крышей», в гибкой инфраструктуре. Приступить к делу вам поможет пошаговое руководство.
6. Firebase Authentication (для маленьких приложений)
Это не обязательно будет долгосрочным решением для управления аутентификацией пользователей на вашей растущей платформе (хотя, кто знает). Но в любом случае это полезный, быстрый и простой способ решить проблему аутентификации в ваших приложениях, развернутых с Firebase.
Для аутентификации пользователей Firebase Authentication предоставляет бэкенд-сервисы, простые в использовании SDK и готовые UI-библиотеки. Поддерживает аутентификацию с использованием паролей, телефонных номеров, а также популярных систем проверки личности, таких как Google, Facebook и Twitter. Узнать больше можно здесь.
Есть очень хорошее руководство по созданию React-приложения с использованием Firebase для аутентификации пользователей при помощи Facebook, Twitter и GitHub.
Также есть похожее руководство для создания Vue.js приложения с аутентификацией Firebase.
[customscript]techrocks_custom_after_post_html[/customscript]
[customscript]techrocks_custom_script[/customscript]