как нам реализовать функцию входа в систему с помощью python-eve

Я понимаю, что python-eve поддерживает аутентификацию на основе HMAC или токенов, т.е. включая токен или хэш в заголовке для каждого запроса. однако как мы должны реализовать вход в систему в первую очередь, то есть процесс, в котором мы проверяем имя пользователя и пароль, прежде чем мы предоставим им хеш токена / hmac? мы просто примем новый метод маршрута, как показано ниже, и прочитаем БД напрямую, или есть лучший способ сделать это?

app.route('/login', methods['POST'])

person John    schedule 28.04.2014    source источник


Ответы (2)


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

Логины не принадлежат службам REST, которые по определению не имеют состояния (они не хранят состояние клиента, поэтому вы выполняете аутентификацию при каждом отдельном запросе).

Мой совет заключается в том, чтобы обрабатывать регистрацию пользователей на другом сервисе/веб-сайте, а не на самом API. В любом случае убедитесь, что токен/идентификатор пользователя/секретный ключ отправляется вне диапазона. Атаки «человек посередине» и тому подобное могут подделать секретный ключ, а затем использовать его для подписи запросов API от имени предполагаемого клиента.

person Nicola Iarocci    schedule 29.04.2014
comment
спасибо, Николас, я согласен с вами, вероятно, предоставление секрета пользователю находится в сфере действия REST. Однако уместный вопрос: какая часть аутентификации уже встроена в python-eve? например, кэширование сопоставления user:secret? - person John; 29.04.2014

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

Тем не менее, я думаю, вы могли бы выполнить начальную базовую аутентификацию, поддерживаемую Eve, и вернуть токен, который ваш клиент будет использовать в последующих запросах. На мой взгляд, преимуществом безопасности будет то, что учетные данные уязвимы только во время первоначального запроса, а не при каждом отдельном запросе. Недостатком является то, что IdP и SP будут одним и тем же.

Подробнее об авторизации по токену можно прочитать здесь:

Надеюсь, поможет.

person Adrian    schedule 14.10.2014