6 bibliotek JavaScript do uwierzytelniania użytkownika
„Zbuduj mi system do uwierzytelniania użytkownika w ciągu dwóch tygodni” to dziś popularne zdanie wypowiadane w zespołach R&D. Z różnych powodów to zadanie zawsze spada na jednego developera. Z jednej strony naprawdę nie chcesz na to tracić czasu, ale z drugiej wiesz, że lepiej byłoby, gdyby tego rodzaju informacje były obsługiwane przez twoją wewnętrznie napisaną usługę, by później to łatwiej skalować.
Ponieważ w sieci pojawiają się nowe tutoriale (dobre miejsce na początek), a coraz więcej zespołów próbuje zrozumieć równanie kosztów i korzyści dla wdrożenia własnego rozwiązania w porównaniu z używaniem bibliotek oraz usług, to zebrałem tutaj wszystkie przydatne informacje. Mam nadzieję, że to pomoże w zaoszczędzeniu czasu i podejmowaniu bardziej świadomych decyzji.
1. Passport JS
Passport.js to nie tylko biblioteka do uwierzytelniania użytkowników z 15 000 gwiazdek, ale prawdopodobnie najczęstszy sposób deweloperów JS na użycie w tym celu zewnętrznej biblioteki. Biblioteka ta zapewnia stosunkowo elastyczne i modułowy middleware dla Node.js, który można zintegrować z dowolną aplikacją webową opartą na Express.
Passport obsługuje różne rodzaje powszechnych strategii uwierzytelniających, takich jak nazwa użytkownika i hasło, Facebook, Twitter i inne. Jeśli nie chcesz wdrażać własnego rozwiązania, prawdopodobnie jest to Twoja pierwsza opcja. Zwróć jednak uwagę na często popełniane błędy i postaraj się ich unikać.
https://github.com/jaredhanson/passport
- Express
- My używamy Bit do izolowania poszczególnych elementów z Passport.js (np. rozszerzeń) i używamy ich w niektórych z naszych projektów :)
2. Auth0
Pomimo że nie jest to biblioteka, lecz usługa, to nadal jest to jednak solidny i szybki sposób na wykonanie zadania. Auth0 jest startupem, który zapewnia uniwersalną platformę uwierzytelniania dla aplikacji webowych oraz mobilnych. Niektórzy twierdzą, że jest to rozwiązanie najbliższe Plataformatec's Devise dla Ruby on Rails, z tym wyjątkiem, że tutaj możesz połączyć aplikację lub API w dowolnym języku. Istnieje ponad 100 gotowych integracji, a tutaj można zaczynać z Node.js.
3. Permit
Permit to projekt z 1000 gwiazdek, który celuje w dostarczenie biblioteki „nienarzucającej konwencji”, która ułatwi budowanie API w Node.js. Permit pozwala na dodanie warstwy uwierzytelniania do dowolnego API Node.js i może być używany z takimi frameworkami jak Express, Koa, Hapi i Fastify. Może on być również używany z wieloma typami API, począwszy od REST i skończywszy na GraphQL.
Permit ma na celu skupienie się na API (żądaniach bezstanowych) i wsparciu frameworków innych niż Express. Warto też dodać, że Permit jest aktywnie rozwijany.
https://github.com/ianstormtaylor/permit
Przykłady. Oto jeden z Express:
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)
4. Grant
„Nie ma mowy, żebym sam to robił” — Ulysses S. Grant
Jest to dość nowa i obiecująca biblioteka zapewniająca oprogramowanie pośredniczące OAuth dla Express, Koa i Hapi z ponad 180 obsługiwanymi dostawcami i środowiskiem testowym dostępnym online. Jeśli chcesz jej używać z własnym prywatnym dostawcą OAuth, możesz samodzielnie określić wymagany klucz. Chociaż biblioteka ta zyskuje już popularność (+1 000 gwiazdek), zasobów na jej temat jest stosunkowo mało, więc bądź ostrożny.
https://github.com/simov/grant
5. Feathers
Feathers to framework open source (11 000 gwiazd), dedykowany przetwarzaniu w czasie rzeczywistym i rozwiązaniom mikroserwisowym w Node.js. Kontrolę nad danymi zapewnia poprzez REST, gniazda i system elastycznych wtyczek.
Feathers zapewnia również moduły zarządzania uwierzytelnianiem, które pozwalają dodawać weryfikację rejestracji, resetowanie zapomnianego hasła i inne funkcje do systemu uwierzytelniania. Chodzi tutaj o połączenie różnych metod uwierzytelniania pod jednym dachem w elastycznej infrastrukturze. Oto przewodnik, który krok po kroku pomoże Ci zacząć.
https://github.com/feathersjs-ecosystem/authentication
https://github.com/feathers-plus/feathers-authentication-management
6. Firebase Authentication (dla małych apek)
To nie musi być rozwiązanie docelowe do zarządzania uwierzytelnianiem użytkownika na Twojej platformie. Jest to jednak bardzo przydatny sposób, aby szybko i prosto wykonać to zadanie w aplikacji, która wyląduje na Firebase.
Firebase Authentication zapewnia usługi backendowe, łatwe w użyciu SDK i gotowe biblioteki UI do uwierzytelniania użytkowników w Twojej aplikacji. Obsługuje uwierzytelnianie przy użyciu haseł, numerów telefonów, popularnych dostawców tożsamości federacyjnej, takich jak Google, Facebook i Twitter. Dowiedz się więcej tutaj.
Oto bardzo fajny tutorial na temat tworzenia aplikacji React, który wykorzystuje Firebase do uwierzytelniania użytkowników za pomocą Facebooka, Twittera i GitHuba:
https://blog.bitsrc.io/react-oauth-authentication-with-firebase-dfe0e8c5d0d4
A oto podobny tutorial dotyczący budowania aplikacji Vue.js z uwierzytelnianiem Firebase:
https://blog.bitsrc.io/build-a-vue-app-with-firebase-authentication-and-database-e7d6816f79af
Tutaj ze stosem MERN (seria 3-częściowa):
https://blog.bitsrc.io/build-a-login-auth-app-with-mern-stack-part-1-c405048e3669
Również warte uwagi
Większość z nich nie jest aktywnie wspierana, więc bądź ostrożny.
https://github.com/bnoguchi/everyauth
https://docs.amplify.aws/lib/auth/getting-started/q/platform/js
https://github.com/iaincollins/next-auth
https://github.com/sffc/easy-no-password
https://github.com/jaredhanson/oauth2orize
https://github.com/stormpath/stormpath-sdk-react