3

Я внедряю REST API, который имеет как мобильные приложения, так и клиенты и пользователи на основе браузера. Основываясь на вопросах, заданных мной и предыдущих вопросах здесь, и в security.stackexchange, я пришел к выводу, что для того, чтобы оставаться как «RESTful», насколько я могу, насколько это возможно, HTTP Basic Auth over SSL достаточно для аутентификации. Проблема в том, что я также хотел бы реализовать Two Factor Authentication вместе с ним. Допустимо ли добавлять заголовки в ответ заголовка авторизации 401, например, имя пользователя: пароль: токен или полностью отдельный заголовок запроса, но в той же полезной нагрузке, что и основной ответ авторизации клиента? Поскольку я использую node.js + express/connect, у меня есть доступ ко всему стеку протоколов HTTP, но вы хотите оставаться как можно более спокойным по причинам масштабируемости. На стороне браузера, я думаю, я мог бы выполнить базовый auth, и если он пройдет, попросите токен TFA, и только если он пройдет, рассмотрим пользователя, прошедшего проверку подлинности.Двухфакторная аутентификация с использованием Basic Auth для API REST?

ответ

6

Вы можете технически составить новые схемы аутентификации для расширения от HTTP Basic Auth, но они, как правило, не поддерживаются браузерами. В вашем примере я не считаю, что какой-либо браузер сможет запросить и отправить имя пользователя: пароль: токен таким же образом, что они могут легко запросить имя пользователя и пароль.

Обычно схемы двухфакторной аутентификации работают, помещая пользователя в промежуточное состояние, используя некоторые формы сеансов, как вы упомянули в своем втором примере. Пользователь, который прошел первый фактор, скажем, имя пользователя/пароль через Basic Auth, имеет сеанс, открытый, но не помеченный как действительно зарегистрированный, пока они также не передадут второй фактор. Ввод кода ключа или что-то в этом роде. Как только оба фактора пройдены, их сеанс помечен как полностью зарегистрированный, и они могут получить доступ к своей учетной записи/данным/независимо.