Аутентификация Firebase на рабочих станциях Cloudflare

Firebase очень прост в использовании. Предоставляемый SDK доступен практически для всех языков и платформ. Единственное, чего сейчас не хватает, это SDK администратора для веб.

На самом деле, он доступен для Javascript, но создан для работы на Node. Есть некоторые среды, которые не поддерживают эту платформу и используют стандартные веб-интерфейсы.

Одной из таких сред является Cloudflare Workers. Если вы попытаетесь использовать Admin SDK для Node на этих рабочих, он просто не будет работать из-за отсутствия библиотек.

Дело в том, что мне отчаянно нужно было использовать его для моего текущего личного проекта. Я начал рыться в интернете в поисках какого-нибудь уже реализованного решения…., но ничего, ноль результатов.

Поэтому я решил создать свою собственную библиотеку.

Поприветствуйте flarebase-auth

Как вы заметили из названия библиотеки, она охватывает только часть аутентификации.

Я использовал стандартные Web API, такие как fetch() и WebCrypto. Чаще всего мне приходилось заниматься генерацией/оценкой токенов JWT. Я работал с библиотекой jose (единственная зависимость в проекте), потому что она кроссплатформенная и также работает с API WebCrypto.

flarebase-auth довольно прост и написан в основном в 2 файлах: google-oauth.ts и flarebase-auth.ts.

google-oauth.ts

Весь код, связанный с проверкой и генерацией токенов Google OAuth 2.0, написан в этом файле. Поскольку почти каждый запрос должен быть аутентифицирован, я использовал его довольно широко.

Генерация токена OAuth 2.0 — это двухэтапный процесс. Сначала вы подписываете JWT-токен с помощью закрытого ключа учетной записи сервиса Google. Затем вы передаете этот JWT в https://oauth2.googleapis.com/token и получаете маркер доступа. Этот процесс реализован в методе getAuthToken().

flarebase-auth.ts

Здесь находится собственно основная библиотека. Цель состоит в том, чтобы реализовать каждый метод, который вы обычно используете с getAuth() в Firebase Admin SDK.

Сейчас я написал только эти методы, поскольку их достаточно для создания базовой системы входа/регистрации:

  • createSessionCookie()
  • verifySessionCookie()
  • signInWithEmailAndPassword()
  • signUpWithEmailAndPassword()
  • changePassword()
  • lookupUser()

Использование библиотеки

Вы можете задаться вопросом, как я могу использовать ее? Вот пример, начнем с создания экземпляра FlarebaseAuth.

import { FlarebaseAuth } from 'flarebase-auth';

const auth = new FlarebaseAuth({
  apiKey: 'Firebase api key',
  projectId: 'Firebase project id',
  privateKey: 'Firebase private key or service account private key',
  serviceAccountEmail: 'Firebase service account email',
});
Вход в полноэкранный режим Выход из полноэкранного режима

Теперь вы готовы к реальным действиям! Например, вот как вы можете регистрировать пользователей с помощью электронной почты и пароля.

//Sign in with username and password
const { token, user } = await auth.signInWithEmailAndPassword(
  'my@email.com',
  'supersecurepassword'
);

const userEmail = user.email;
const refreshToken = token.refreshToken;
Вход в полноэкранный режим Выход из полноэкранного режима

Библиотека протестирована на фиктивном проекте Firebase с фиктивным пользователем. Позже я узнал, что существует эмулятор аутентификации Firebase, созданный специально для отладочных целей.
Сейчас я буду придерживаться тестового проекта Firebase и продолжу реализовывать другие методы. Если вы хотите добавить эту функцию, вы можете создать запрос на исправление!

flarebase-auth также поддерживает кэширование: вы можете использовать CloudflareKv для автоматического хранения токенов OAuth 2.0 до истечения срока действия.

import { FlarebaseAuth, CloudflareKv } from 'flarebase-auth';

const auth = new FlarebaseAuth({
  apiKey: 'Firebase api key',
  projectId: 'Firebase project id',
  privateKey: 'Firebase private key or service account private key',
  serviceAccountEmail: 'Firebase service account email',

  cache: new CloudflareKv(NAMESPACE);
});
Вход в полноэкранный режим Выход из полноэкранного режима

Следующие шаги для flarebase-auth

Хотя сейчас я успешно использую эту библиотеку в своем текущем проекте, есть еще много улучшений и новых возможностей, которые необходимо реализовать. Вот список того, что я хочу добавить:

  • Расширить поддержку кэширования для открытых ключей (валидация токенов).
  • Реализовать sendEmailVerification()
  • Реализовать confirmEmailVerification()
  • Реализовать deleteAccount()

Ссылки

flarebase-auth доступен на NPM и GitHub Packages. Этот проект полностью с открытым исходным кодом и лицензией MIT, так что делайте, что хотите! Вклад приветствуется 🥳.

  • GitHub: https://github.com/Marplex/flarebase-auth
  • Документация Firebase Auth REST API

Оцените статью
devanswers.ru
Добавить комментарий