Безопасность
Существует множество способов обеспечить безопасность, аутентификацию и авторизацию.
Обычно это сложная и «трудная» тема.
Во многих фреймворках и системах обеспечение безопасности и аутентификации требует значительных усилий и большого объёма кода (во многих случаях на это может уйти 50% или более всего написанного кода).
FastAPI предоставляет несколько инструментов, которые помогут вам легко и быстро обеспечить безопасность стандартным способом, без необходимости изучать все спецификации по безопасности.
Но сначала рассмотрим несколько понятий.
Спешите?
Если вам не важны эти термины и вам нужно прямо сейчас добавить безопасность с аутентификацией по имени пользователя и паролю, переходите к следующим главам.
OAuth2
OAuth2 — это спецификация, определяющая несколько способов обеспечения аутентификации и авторизации.
Это довольно обширная спецификация, охватывающая несколько сложных вариантов использования.
Она включает способы аутентификации с помощью «третьей стороны».
Именно её используют системы с функцией «Войти через Facebook, Google, X (Twitter), GitHub».
OAuth 1
Существовала версия OAuth 1, которая сильно отличается от OAuth2 и является более сложной, поскольку включала прямые спецификации о том, как шифровать обмен данными.
В наши дни она не очень популярна и почти не используется.
OAuth2 не определяет способ шифрования обмена данными, предполагая, что ваше приложение будет работать через HTTPS.
Совет
В разделе о развёртывании вы узнаете, как бесплатно настроить HTTPS с помощью Traefik и Let's Encrypt.
OpenID Connect
OpenID Connect — ещё одна спецификация, основанная на OAuth2.
Она лишь расширяет OAuth2, определяя некоторые моменты, которые в OAuth2 сформулированы относительно неоднозначно, чтобы повысить совместимость.
Например, для входа через Google используется OpenID Connect (который, в свою очередь, использует OAuth2).
Но вход через Facebook не поддерживает OpenID Connect. Вместо этого используется собственный вариант OAuth2.
OpenID (не «OpenID Connect»)
Существовала также спецификация «OpenID». Она пыталась решить ту же задачу, что и OpenID Connect, но не была основана на OAuth2.
Таким образом, это была отдельная полноценная система.
В наши дни она не очень популярна и почти не используется.
OpenAPI
OpenAPI (ранее известная как Swagger) — это открытая спецификация для создания API (теперь входит в Linux Foundation).
FastAPI основан на OpenAPI.
Благодаря этому можно использовать несколько автоматически создаваемых интерактивных интерфейсов документации, генерировать код и т. д.
В OpenAPI предусмотрен способ определения нескольких схем безопасности.
Используя их, вы можете воспользоваться всеми этими инструментами, основанными на стандартах, включая интерактивные системы документации.
OpenAPI определяет следующие схемы безопасности:
-
apiKey: ключ, специфичный для приложения, который может передаваться через:- Параметр запроса.
- Заголовок.
- Файл cookie.
-
http: стандартные системы HTTP-аутентификации, включая:-
bearer: заголовокAuthorizationсо значениемBearerи токеном. Этот способ унаследован от OAuth2. - Базовая HTTP-аутентификация.
- Дайджест-аутентификация HTTP и т. д.
-
-
oauth2: все способы обеспечения безопасности с помощью OAuth2 (называемые «потоками»).- Некоторые из этих потоков подходят для создания провайдера аутентификации OAuth 2.0 (например, Google, Facebook, X (Twitter), GitHub и т. д.):
implicitclientCredentialsauthorizationCode
- Однако есть один конкретный «поток», который можно использовать непосредственно для аутентификации в самом приложении:
-
password: примеры этого будут рассмотрены в следующих главах.
-
- Некоторые из этих потоков подходят для создания провайдера аутентификации OAuth 2.0 (например, Google, Facebook, X (Twitter), GitHub и т. д.):
-
openIdConnect: позволяет автоматически определять данные аутентификации OAuth2.- Этот механизм автоматического обнаружения определён в спецификации OpenID Connect.
Совет
Интеграция с другими провайдерами аутентификации/авторизации, такими как Google, Facebook, X (Twitter), GitHub и т. д., также возможна и относительно проста.
Самая сложная задача — создать провайдера аутентификации/авторизации, подобного этим, но FastAPI предоставляет инструменты, которые позволяют легко это сделать, взяв на себя основную работу.
Утилиты FastAPI
FastAPI предоставляет в модуле fastapi.security несколько инструментов для каждой из этих схем безопасности, упрощающих использование соответствующих механизмов.
В следующих главах вы узнаете, как добавить безопасность в API с помощью инструментов, предоставляемых FastAPI.
Вы также увидите, как всё это автоматически интегрируется в интерактивную систему документации.
© 2018 Sebastián Ramírez
Licensed under the MIT License.
https://fastapi.tiangolo.com/tutorial/security/