Blacksheep имеет встроенную поддержку проверки подлинности и авторизации и позволяет нам интегрироваться с такими службами, как Auth0, Azure Active Directory, Azure Active Directory B2C или Okta.

Для этого урока мы создадим API с фреймворком Blacksheep с аутентификацией JWT. В нашем API будет общедоступная конечная точка и частная конечная точка только для авторизованных пользователей.

Мы будем использовать тот же пример, что и в документации, но вместо этого будем использовать Auth0. Итак, нам нужна Учетная запись Auth0.

Предпосылки

  • Базовые знания Python
  • Как создать простое веб-приложение с помощью Blacksheep Framework

Если вы не знаете, как создать приложение с помощью Blacksheep, вот документация, объясняющая это.

Auth0

Согласно его документации:

Auth0 – это платформа идентификации, позволяющая добавить в ваши приложения сложную аутентификацию и авторизацию. Централизуйте и управляйте пользователями от нескольких поставщиков удостоверений, а также предоставьте им фирменные удобные процедуры регистрации и входа в систему. Точно контролируйте доступ с определенной степенью настройки, которая может удовлетворить даже самые сложные требования безопасности. Легко разверните свою реализацию и отслеживайте состояние и службы.

Создайте приложение Auth0

После того, как мы создадим учетную запись, мы нажимаем «Зарегистрироваться».

После создания нашей учетной записи. Мы переходим в нашу панель инструментов, нажмите «Создать приложение».

Выбираем «Обычные веб-приложения». И затем выберите Python.

.env-файл

AUTHORITY={DOMAIN} 
AUDIENCE=https://{DOMAIN}/api/v2/ 
ISSUERS= https://{DOMAIN}

Затем мы идем в настройки нашего приложения, копируем «Домен» и «Идентификатор клиента» и вставляем их в файл .env.

Мы будем использовать идентификатор клиента, когда нам нужно запросить токен.

Настраивать

Мы создаем нашу виртуальную среду.

py -m venv venv 
cd venv/Scripts 
activate

Затем мы устанавливаем пакеты, которые собираемся использовать.

pip install uvicorn blacksheep[full] python-dotenv

Когда мы импортируем blacksheep[full], мы импортируем необходимые зависимости для использования аутентификации JWT Bearer.

Логика аутентификации и авторизации, реализованная для BlackSheep, была упакована и опубликована в специальной библиотеке: guardpost «(в pypi).

Blacksheep использует GuarPost для аутентификации и авторизации. Он предоставляет базовую структуру для обработки аутентификации и авторизации для любого приложения Python.

main.py

Мы создаем экземпляр класса JWTBearerAuthentication и добавляем параметры: авторитет, аудитории и эмитенты.

JWTBearerAuthentication — это дочерний класс AuthenticationHandler, который может анализировать и проверять токены доступа JWT Bearer для идентификации пользователей.

Создает новый экземпляр JWTBearerAuthentication, который пытается получить удостоверение пользователя из заголовка запроса «Авторизация», обрабатывая токены JWT Bearer. Обрабатываются только стандартные заголовки авторизации, начинающиеся со строки Bearer.

JWTBearerAuthentication имеет больше атрибутов, мы можем их увидеть здесь.

Когда мы запустим наш сервер, мы заметим, что не можем получить доступ к конечной точке api/message. Сервер возвращает код состояния «Неавторизованный».

Получение токена

Нам нужна следующая информация из нашей панели управления Auth0: идентификатор клиента и секрет клиента.

С помощью веб-клиента делаем POST-запрос по адресу: https://{your domain}.com/oauth/token. И со следующим телом:

{"client_id":"CLIENT ID","client_secret":"CLIENT SECRET","audience":"https://{Your domain}.us.auth0.com/api/v2/","grant_type":"client_credentials"}

Если ответ HTTP в порядке, мы получим тело ответа, подобное этому:

"access_token":"TOKEN","expires_in":86400,"token_type":"Bearer"}

Теперь мы делаем запрос GET к нашей защищенной конечной точке, но добавляем заголовок авторизации «Bearer» и вставляем токен.

Заключение

Мне понравился подход Blacksheep, я впервые использую такой сервис аутентификации, как Auth0. Я думаю, что он предлагает что-то отличное от других фреймворков. И это экономит много времени. Мне еще предстоит научиться писать собственный обработчик аутентификации и, возможно, написать об этом.

Спасибо, что нашли время прочитать эту статью.

Если у вас есть какие-либо рекомендации по другим пакетам, архитектурам, как улучшить мой код, английский язык или что-то в этом роде; пожалуйста, оставьте комментарий или свяжитесь со мной через Twitter или LinkedIn.

Исходный код здесь

Рекомендации

Первоначально опубликовано на https://carlosmv.hashnode.dev.