Как работает аутентификация на основе маркеров?
Я реализую веб-приложение (с Python+Django - в той степени, в которой это имеет значение). Пользователи могут нормально входить в систему с помощью имени пользователя и пароля, но в дополнение я хочу предоставить API, который пользователи используют для сценариев взаимодействия с моим сайтом.
Для аутентификации API я планировал сделать примерно следующее:
- В базе данных я создаю таблицу с "токенами" - т.е. случайными строками, которые указывают на базу данных пользователя.
- Пользователь получает строку токена.
- При каждом вызове API пользователь передает строку токена вместе с запросом .
В реализации API код:
- Проверьте токен.
- Войдите в систему и выполните функцию API как пользователь, соответствующий маркеру.
- Снова выйдите из системы.
- Верните результат .
Имеет ли это смысл? С одной стороны, это кажется очень простым - с другой стороны, это кажется довольно домашним, что-то, что, как я слышал, не рекомендуется, когда речь идет о темах, связанных с безопасностью?
Я бы от всей души рекомендовал посмотреть django-rest-framework
https://www.django-rest-framework.org/
Он буквально делает все это и даже больше!
Неа, не продавец, просто разработчик :)
Он подходит буквально для любого случая использования, который вы можете придумать, и я буду рад подробно обсудить все, для чего он не подходит.
Он обрабатывает:
- Аутентификация
- Парсинг
- Энкодирование
- Разрешения на уровне вида или объекта
- Сериализация объектов
- Создание объекта
- Удаление объектов
- Автоматически создаваемая документация
- Несколько методов аутентификации, включая пользовательские управляемые методы
- И куча других вещей, которые значительно упрощают написание API на Django .
В целом, он поддерживает большинство, если не все случаи использования.
EDIT
Стоит отметить, что есть очень веская причина, по которой DRF имеет токены доступа с коротким сроком действия. Это связано с безопасностью.
Допустим, злоумышленник завладел вашим токеном доступа с коротким сроком действия, это гораздо лучше, чем "долгоживущий", как вы описали.
Стоит взвесить безопасность и простоту доступа, безопасность и защита ваших пользователей всегда должны быть на первом месте.