Rust: как создать сервер аутентификации с Warp и JWT

freeCodeCamp.org 43,4 тыс. 1 ч 35 мин 2 мин 22.09.2023
Главное

Создание аутентификационного сервера на Rust: Warp и JWT 🦀 0:00

В этом руководстве опытный Rust-разработчик Акил Шарма (Akil Sharma) демонстрирует процесс создания полноценного сервера аутентификации на языке Rust. В качестве основы для API используется легковесный веб-фреймворк Warp, позволяющий быстро развернуть решение без избыточности, свойственной более крупным фреймворкам вроде Actix или Rocket. Проект включает в себя не только аутентификацию через JWT (JSON Web Token), но и продвинутую систему ролевой авторизации (пользователь/админ), а также детальную обработку ошибок.

🛠 Архитектура проекта и инструменты 1:17

В данном проекте для хранения пользователей вместо полноценной базы данных используется HashMap, хранящийся в оперативной памяти. Это позволяет сфокусироваться на логике работы JWT и механизмах фильтрации запросов.

🏗 Структура данных и авторизация 10:59

Для корректной работы сервера необходимо определить структуры данных (struct), которые будут представлять пользователей и запросы. Акил Шарма отмечает, что при работе с фреймворками в Rust важно заранее понимать основы типов данных: struct позволяет создавать кастомные типы для управления состоянием пользователя.

  1. User: содержит uid, email, password и role.
  2. LoginRequest: только email и password для отправки данных.
  3. LoginResponse: возвращает сгенерированный токен.

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

🔐 Реализация логики JWT и маршрутизация 38:49

Основная магия происходит в модуле auth.rs, где реализованы функции кодирования и декодирования токенов.

По словам Шармы, Rust требует явного описания всех типов и обработчиков, что, хоть и добавляет «boilerplate-кода», значительно повышает безопасность и надежность системы, предотвращая типичные ошибки выполнения.

⚠️ Обработка ошибок 1:15:08

Для создания production-ready приложения автор внедряет систему обработки ошибок через перечисление enum Errors.

В завершение Акил Шарма напоминает, что весь исходный код доступен в его репозитории на GitHub под ником akhilsharma90, а сам процесс написания кода на Rust требует дисциплины и понимания того, как работают потоки данных в асинхронном окружении.

💬 Цитаты

«Поскольку Json уже является JavaScript-транзишном, JS понимает его по умолчанию, но Rust — нет. Именно поэтому нам нужно делать сериализацию и десериализацию.»

Акил Шарма 14:56

«Rust имеет строгую типизацию, и это гарантирует, что вы не наделаете кучу ошибок при создании сложной архитектуры.»

👥 Спикер
🔗 Упомянутые сайты и проекты
📖 Термины
Warp
Легковесный веб-фреймворк для Rust, ориентированный на скорость и удобство создания API.
JWT
JSON Web Token — компактный, безопасный способ передачи информации между сторонами в виде JSON-объекта.
Serde
Фреймворк для эффективной сериализации и десериализации данных в Rust.
Tokio
Популярная асинхронная библиотека для языка Rust, обеспечивающая среду выполнения для сетевых приложений.
Middleware
Промежуточное программное обеспечение, которое перехватывает запросы для проверки токенов и прав доступа до того, как они попадут к основному обработчику.
📊 Цифры
⚖️ Другая сторона
Технологии и IT Rust Warp JWT Акил Шарма аутентификация