惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Vercel News
Vercel News
The GitHub Blog
The GitHub Blog
博客园 - 【当耐特】
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Recent Announcements
Recent Announcements
D
Docker
GbyAI
GbyAI
酷 壳 – CoolShell
酷 壳 – CoolShell
WordPress大学
WordPress大学
The Cloudflare Blog
雷峰网
雷峰网
A
About on SuperTechFans
小众软件
小众软件
博客园 - Franky
博客园 - 聂微东
F
Full Disclosure
大猫的无限游戏
大猫的无限游戏
C
Check Point Blog
MongoDB | Blog
MongoDB | Blog
G
Google Developers Blog
Microsoft Azure Blog
Microsoft Azure Blog
U
Unit 42
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
V
V2EX
Engineering at Meta
Engineering at Meta
宝玉的分享
宝玉的分享
aimingoo的专栏
aimingoo的专栏
量子位
P
Proofpoint News Feed
Hugging Face - Blog
Hugging Face - Blog
博客园_首页
罗磊的独立博客
Martin Fowler
Martin Fowler
D
DataBreaches.Net
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
S
Secure Thoughts
Project Zero
Project Zero
L
LangChain Blog
阮一峰的网络日志
阮一峰的网络日志
C
Cybersecurity and Infrastructure Security Agency CISA
T
Tailwind CSS Blog
S
Schneier on Security
Blog — PlanetScale
Blog — PlanetScale
The Hacker News
The Hacker News
Spread Privacy
Spread Privacy
Security Latest
Security Latest
NISL@THU
NISL@THU
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
C
CXSECURITY Database RSS Feed - CXSecurity.com
J
Java Code Geeks

Все публикации подряд на Хабре

Ловим музу за клавиатуру: как айтишнику стать автором Что умеет Midjourney в 2026? Мой немного грустный разбор этого шикарного инструмента Никто не любит писать тесты, но ИИ может исправить это IPv8 выглядит как мечта. Поэтому почти наверняка не взлетит Производители вернули в продажу материнки с DDR3. Что происходит? Управление агентом с телефона через Telegram теперь в KodaCode От координации к лидерству: как меняется роль руководителя разработки Я сделала родителям бизнес вместо пенсии: зарабатываем 70 тысяч, мама не даёт продать В три раза быстрее приемка товара и оптимизация трудозатрат на 73%: как «РСТ-Инвент» помог Gulliver Group ИИ-шечный мир победил? О влиянии искусственного интеллекта на игропром Кремль снижает давление на Телеграмм пока Европа строит интернет по паспорту Как CEO, CTO и CIO за 8 часов собрали ИИ-директора, который умеет держать позицию под давлением Как (не) потерять домен за выходные Вместо 8 разных VPS: как я организовал практику студентам на одном сервере Почему твой Open Source проект не замечают? R&D: искусство управления неопределенностью в разработке AI-дефляция: вакансий для разработчиков больше, а рост зарплат — худший за 15 лет Мы отдали управление роботами OpenClaw. Что из этого вышло Галактический ID: система идентификации для всех форм разумной жизни Шесть основ бизнес-анализа: начинаем с вопроса «Кто в игре?» Код-ревью, в котором дело не в коде Данные переехали. Команда — нет Системной подход к сдаче OSWE в 2025 Почему комната управления реактором покрашена в цвет морской пены 4 YAML-файла вместо PySpark: как аналитикам строить пайплайны без разработчиков LLM-агент для поиска свободных доменов: автоматизируем подбор Когда, зачем и как правильно начинать новую сессию в Claude Code? Как я заставил нейросеть писать макросы для FreeCAD Анатомия ИИ‑агента для подбора персонала. От тысячи резюме к топ‑10 за минуты Опыт разработчика как экономика внимания Автономность как точка невозврата: кто будет субъектом в цифровом будущем Обучение ИИ в «диких» условиях: как рутинные действия превращаются в датасеты Как измерить LLM для задач кибербеза: обзор открытых бенчмарков Где хранить код? Сравнение GitHub, GitLab и Bitbucket Математика объясняет, почему нормальное распределение встречается повсюду Почему ваш FinOps не работает: 12 тезисов от практиков Как подписать проектную документацию УКЭП с использованием бесплатных лицензий Pilot Адаптивное администрирование Sigla Vision Я грузил уран в бочки, а потом 20 лет строил ИТ в атомной отрасли Чем позвонить с Эвереста? История и обзор спутниковой связи. Часть 2 Как языковая модель помогает контролировать качество инструктажей по охране труда в металлургии Как не передать на desktop свой IP в РКН Анатомия SAP Privileges: как устроено управление правами в macOS MoneyDev: Сказка про три главных слова Обновлённый токенизатор видео K-VAE 2.0 от Сбера Как сделать диспетчеризацию дома на 1284 квартиры почти бесплатно Как мы разогнали железную дорогу Мы дали агентам рутину. Теперь надо решить — что делать с освободившимся временем Токсичный контент, промпт-хакинг и защита ИИ — всё о Guardrails для LLM Умный город начинается с точного взгляда: как «Фалькон Тех» меняет пространство к лучшему Навайбкодил приложение для анализа графов Почему Дюну так интересно читать? Упрощаем работу с рутиной или как стать Гендальфом Белым Деконструкция Go: CPU, RAM и что там происходит. Go Assembler база. Часть 1.1 Какие профессии исчезнут из-за ИИ, а какие появятся? И что с этим делать Как мы построили IT-отдел, где хочется расти: архитектурные встречи, прозрачные метрики и книжные подарки Rufler: Делаем из Claude Code автономный рой через один YAML-конфиг Sing-box и белый список приложений Как построить надёжный обмен сообщениями в микросервисах: лучшие практики для enterprise OpenAI строит MLM-пирамиду, а McKinsey и Accenture помогают ей в этом Дом, который не построил Фишер (Часть 2) «Сверхзвуковой математик» против «Вдумчивого логиста»: битва алгоритмов 3D-упаковки Мультимодальные модели – грубый и дорогой инструмент Разговоры ничего не стоят. Код тоже Проверки физических лиц: с кого начнет ФНС Топ-10 бесплатных нейросетей для создания видео в 2026 году Первые слои кода: как наши решения сегодня определяют архитектуру ИИ на десятилетия Разработка нового статического анализатора: PVS-Studio JavaScript Поиск уязвимостей ПО: базовый минимум или роскошный максимум Почему оценка персонала не работает как инструмент управления Как мы разработали ИИ-ассистента и сократили рутину продуктовой команды на 50% Как я ушел из найма, нажарил косточек и продал на маркетплейсах на 168 млн в год Когда 1С:ERP уже внедрена, а нормального производственного плана всё ещё нет Как я сделал Claude мультимодальным, подключив к нему Qwen Omni Как приглашение на вакансию мечты превращается в атаку Infrastructure as Code: философия и лучшие практики IaC Тестируем Yandex Code Assistant на задаче, в которой нужно хранить секреты nxs-universal-chart v3.0: новое поколение универсального Helm-чарта Callback Injection: Техника, которая отправила Microsoft Defender в глухой нокаут «Все идеи на стол»: митап как способ вывести проект из тупика Сегодня я узнал нечто новое о GPU благодаря багу в своей игре Как заставить LLM ̶ ̶г̶а̶л̶л̶ю̶ ̶ эволюционировать Карта событий как фундамент аналитики: практический кейс для E-commerce Что выбрать для AI: x86, ARM или RISC-V? Дайджест железа за март Роль соматических мутаций в развитии аутоиммунных заболеваний: путь к избирательной терапии Mythos от Anthropic — тревожный сигнал для всех, а не только для банков Guardrails для LLM на Java: как приручить промпт‑инъекции и токсичные ответы Green-VLA: как мы собрали VLA-модель для реального антропоморфного робота и не потеряли обобщение Финансовая гонка вооружений: почему умные люди добровольно в ней участвуют Эра ИИ-агентов наступила: выбираем лучшего цифрового сотрудника # Практический опыт внедрения WinCC Redundancy на производственном предприятии Сделал MVP за 3 дня, а потом неделю прикручивал оплату. Оно того стоило? Физика против Маска: почему Starship V3 может оказаться ещё одной катастрофой Нефть Венесуэлы: крупнейшие запасы в мире, но не крупнейшая нефтяная держава JPA 4. Переосмысление Hibernate Почему зеркальная фотокамера Nikon D5 десятилетней давности идеально подошла для миссии «Артемида-2» Проект «Уровень-Спутник» или как мы сделали платформу для гидрологов «Замедлиться, чтобы ускориться»: почему ИИ повышает цену ошибок в требованиях и архитектуре Как с нуля поднять трафик IT-компании на 1657% при бюджете 55 тыс. и выжить Pixel-perfect Downsampling — идеальная отрисовка 50 миллионов точек без потерь
Аутентификация и авторизация в Python: сессии и JWT токены в Backend-разработке
artemshumeik · 2026-05-06 · via Все публикации подряд на Хабре

Уровень сложностиСредний

Время на прочтение7 мин

Охват и читатели1.2K

Обзор

Содержание

  1. Введение в аутентификацию и авторизацию: основные понятия

  2. Регистрация, аутентификация и авторизация: отличия и этапы

  3. Сессионный механизм (Session‑based authentication): принцип работы и хранение сессий

  4. Хранение сессий в Redis и базах данных: выбор и особенности

  5. Механизмы продления и инвалидации сессий

  6. Практическая демонстрация работы с сессиями на Python и FastAPI

  7. JWT токены (Token‑based authentication): структура и особенности

  8. Генерация, хранение и использование Access и Refresh токенов

  9. Особенности безопасности JWT токенов и рекомендации по хранению

  10. Обновление и инвалидация JWT токенов: механизмы и сложности

  11. Сравнение сессий и JWT токенов: плюсы, минусы и сферы применения

  12. Заключение и советы по выбору механизма аутентификации для проектов


Введение в аутентификацию и авторизацию: основные понятия

Аутентификация и авторизация — фундаментальные процессы в разработке современных программных продуктов, обеспечивающие безопасность и контроль доступа пользователей к ресурсам приложения. 

В широком смысле аутентификация — это процесс подтверждения личности пользователя, то есть проверка, кто именно обращается к системе. Авторизация же отвечает за проверку прав пользователя, то есть что он может делать внутри системы после того, как его личность подтверждена.

Важной особенностью является то, что авторизация и аутентификация — это разные этапы. Пользователь может быть аутентифицирован (подтвердил свою личность), но не иметь прав на выполнение конкретных действий (не авторизован). Например, гость на сайте YouTube может смотреть общедоступные видео без авторизации, то есть без предоставления учетных данных, но для загрузки видео или комментирования потребуется авторизация.

В контексте веб-приложений, API и мобильных приложений аутентификация реализуется через различные механизмы — хранение сессий, токены и другие методы. При этом протокол HTTP является статeless (без состояния), что требует от клиента при каждом запросе передавать некие учетные данные для поддержания сессии взаимодействия с сервером.

Регистрация, аутентификация и авторизация: отличия и этапы

Процесс взаимодействия пользователя с системой можно разбить на четыре ключевых этапа:

1. Регистрация — пользователь предоставляет свои данные (например, имя, почту, пароль), которые сервер сохраняет в базе данных. Это создание новой учетной записи.

2. Аутентификация — подтверждение личности пользователя через логин и пароль или другие методы. Сервер сверяет полученные данные с хранилищем и, если данные совпали, выдает пользователю учетные данные для дальнейших запросов.

3. Авторизация — проверка прав пользователя на выполнение конкретных операций. Не всегда требует обращения к базе данных, часто данные о правах включаются в токены или сессии.

4. Выход из системы (logout) — удаление учетных данных с клиента и/или сервера для завершения сессии и предотвращения дальнейшего доступа.

Примечательно, что регистрация и аутентификация часто совмещаются: после регистрации пользователь автоматически получает учетные данные и может использовать приложение без дополнительного входа.

Сессионный механизм (Session-based authentication): принцип работы и хранение сессий

Сессии — один из классических и самых распространённых способов аутентификации, появившийся ещё в конце XX века. В основе лежит идея хранения информации о пользователе на сервере, а клиент получает лишь уникальный идентификатор сессии — токен.

Как работает сессия:

  1. Пользователь вводит логин и пароль, отправляет их на сервер.

  2. Сервер проверяет данные в базе и создает новую сессию — уникальную случайную строку (токен).

  3. Токен сохраняется на сервере (в базе данных или в оперативной памяти) и отправляется клиенту, чаще всего через HTTP cookie.

  4. При каждом последующем запросе клиент отправляет этот токен серверу.

  5. Сервер сверяет полученный токен с хранилищем, если сессия валидна — выполняет запрос от имени пользователя.

Токен сессии обычно представляет собой UUID или случайную строку, сгенерированную с помощью библиотек, например secrets в Python. Для безопасности в базе хранится не сама сессия, а её хэш — односторонний результат хеширования, который невозможно восстановить обратно. Это защищает от использования украденных данных базы.

Хранение сессий в Redis и базах данных: выбор и особенности

Выбор хранилища сессий зависит от нагрузки и архитектуры приложения:

  • PostgreSQL и другие реляционные базы подходят для приложений с небольшой или средней нагрузкой (до 50-100 запросов в секунду). Это удобно для Pet-проектов и стартапов без высокой масштабируемости.

  • Redis — высокопроизводительное хранилище в оперативной памяти, оптимально для Enterprise и приложений с большой нагрузкой (сотни и тысячи запросов в секунду). Redis поддерживает быстрое выставление срока жизни (expire) ключей, что упрощает управление сессиями.

Redis также широко используется благодаря возможностям репликации, бэкапов (RDB, AOF), что обеспечивает надёжность хранения данных. В продакшене Redis не рассматривается как игрушка, а как полноценная часть инфраструктуры.

Механизмы продления и инвалидации сессий

Для безопасности и удобства пользователей сессии имеют ограниченный срок жизни и механизмы продления:

  • Абсолютный тайм-аут — сессия действует ограниченное время (например, 3 месяца), после чего требуется повторная аутентификация.

  • Тайм-аут бездействия (idle timeout) — сессия истекает, если пользователь не проявляет активности в течение установленного периода (например, 5 минут в банковских приложениях).

Часто используется комбинация этих двух подходов. При активности пользователя срок действия сессии продлевается, обычно обновляется ключ в Redis с помощью команды EXPIRE, что более эффективно, чем обновлять записи в реляционной базе.

Инвалидация сессии — важный механизм безопасности. Если сессию украли, её можно быстро удалить из хранилища, что мгновенно лишит злоумышленника доступа.

Практическая демонстрация работы с сессиями на Python и FastAPI

Реализация сессий на FastAPI с использованием SQLAlchemy и Redis выглядит следующим образом:

  • При логине сервер проверяет пользователя, генерирует случайный токен сессии и хэширует его.

  • Хэш сохраняется в Redis или базе данных, а токен отправляется клиенту в cookie с параметром HttpOnly, что предотвращает доступ к нему из JavaScript и снижает риск XSS-атак.

  • При каждом запросе клиент автоматически отправляет cookie, сервер проверяет валидность сессии.

  • Для выхода из системы сервер сбрасывает cookie, устанавливая срок истечения в текущий момент, что удаляет сессию на клиенте.

  • Важный момент — ответственность backend-разработчика за правильную настройку cookie: HttpOnlySecureSameSite и другие параметры, чтобы обеспечить безопасность и корректное поведение в браузерах.

JWT токены (Token-based authentication): структура и особенности

JWT (JSON Web Token) — современный механизм token-based аутентификации, появившийся в 2014 году. Он представляет собой компактный, самодостаточный токен, содержащий в себе данные о пользователе и подпись для проверки подлинности.

Структура JWT:

  • Header — информация о типе токена и алгоритме подписи (например, HS256).

  • Payload — полезная нагрузка с данными (claims), такими как sub (идентификатор пользователя), exp (время истечения), iat (время выпуска), а также кастомные права и роли.

  • Signature — криптографическая подпись, которая защищает от подделки токена.

Токен кодируется в Base64URL и разделяется точками, например: header.payload.signature.

JWT можно декодировать (например, на сайте jwt.io) и прочитать его содержимое, но нельзя без секретного ключа изменить payload, так как подпись станет недействительной.

Генерация, хранение и использование Access и Refresh токенов

В системе с JWT обычно используются два токена:

  • Access token — короткоживущий токен (обычно 15-30 минут), который передается с каждым запросом для аутентификации пользователя.

  • Refresh token — долгоживущий токен (до месяца и более), который используется для получения нового access token после истечения срока действия.

Процесс генерации и использования:

  1. При логине сервер проверяет пользователя, создает access token и refresh token.

  2. Access token не хранится на сервере, он полностью самодостаточен.

  3. Refresh token хранится в базе данных (в зашифрованном или хешированном виде).

  4. Клиент хранит оба токена в HTTP-only cookie для защиты от XSS.

  5. При истечении access token клиент отправляет refresh token на специальный endpoint для получения новых токенов.

  6. Сервер проверяет refresh token в базе, если он валиден — выдает новую пару токенов и аннулирует старый refresh token.

Особенности безопасности JWT токенов и рекомендации по хранению

JWT токены несут в себе определённые риски и требуют аккуратного обращения:

  1. Нельзя хранить в JWT чувствительные данные (пароли, ключи, номера телефонов, e-mail), так как payload может быть прочитан при декодировании.

  2. Refresh токен должен храниться только в HTTP-only cookie, чтобы JavaScript не мог получить доступ и минимизировать риск XSS.

  3. Access токен иногда хранят в памяти или session storage, но лучше тоже в куках.

  4. Из-за отсутствия централизованного хранилища access токен сложно инвалидировать до истечения срока, что создает риск, если токен украден.

  5. Для повышения безопасности в микросервисной архитектуре лучше использовать алгоритмы с асимметричным шифрованием (RS256), которые позволяют валидировать токены без передачи приватного ключа.

Обновление и инвалидация JWT токенов: механизмы и сложности

Обновление токенов реализуется через refresh token:

  • Клиент при истечении access token отправляет refresh token на специальный endpoint.

  • Сервер проверяет валидность refresh token, аннулирует старый и создает новую пару токенов.

  • Это предотвращает вечный доступ злоумышленников при краже refresh токена.

Инвалидация access token проблематична, так как он не хранится на сервере. Решением может быть:

  • Использование поля jti (JWT ID) для хранения идентификатора токена и ведения черного списка (revocation list) на сервере, что фактически превращает JWT в сессии.

  • Но это снижает преимущества JWT, так как требует дополнительного хранилища и обращений к нему.

Сравнение сессий и JWT токенов: плюсы, минусы и сферы применения

Заключение и советы по выбору механизма аутентификации для проектов

Если тебе интересна Backend разработка, приглашаю на практический курс “Backend-разработка на Python”, где ты изучишь всё, что пригодится на работе Backend разработчику за 3 месяца на практике и напишешь 2 проекта в портфолио.

Выбор между сессионным и token-based (JWT) механизмом аутентификации зависит от множества факторов, в том числе архитектуры приложения, требований безопасности, объёма нагрузки и специфики бизнеса.

  1. Для монолитных приложений и систем с высокими требованиями к безопасности (например, банковские приложения) сессии остаются актуальным и надёжным способом, так как позволяют легко управлять сессиями и быстро инвалидировать доступы.

  2. Для микросервисной архитектуры, распределённых систем и мобильных приложений, где важна масштабируемость и минимальное количество обращений к базе, предпочтительнее использовать JWT токены с разделением на access и refresh токены.

  3. Безопасность в JWT требует особого внимания к хранению токенов на клиенте и правильной реализации логики обновления и инвалидации.

  4. В любом случае необходимо оценивать бизнес-контекст, риски и удобство для пользователей.

Надеемся, материал помог понять базовые принципы аутентификации и авторизации, а также на практике реализовать сессионный и token-based подходы с использованием Python, FastAPI и SQLAlchemy. Осознанный выбор между этими механизмами позволит создавать более безопасные и масштабируемые backend-приложения.