Использование Flask-Security как части REST API

В документах по Flask-Security упоминается поддержка JSON/Ajax для всех важные конечные точки просмотра. Таким образом, можно получить все встроенные возможности Flask-Security, поражая представления объектами JSON.

Но теперь я пытаюсь использовать его как часть RESTful API, и он не работает, потому что ему нужен токен CSRF, который необходим для веб-страниц, но не для API:

{
    "meta": {
        "code": 400
    },
    "response": {
        "errors": {
            "csrf_token": [
                "CSRF token missing"
            ]
        }
    }
}

Каков наилучший способ обойти это?


person petrus-jvrensburg    schedule 25.10.2014    source источник


Ответы (2)


При использовании REST API предпочтительным методом является аутентификация на основе токенов с чем-то вроде JSON Web Token (JWT). Эта схема имеет другой ландшафт безопасности, поскольку вы не создаете HTML на стороне сервера и не используете файлы cookie. Я не эксперт по безопасности, но из того, что я прочитал, это означает, что вы не подвержены подделке межсайтовых запросов (CSRF). Вот почему отключение токенов CSRF в Flask-Security — это нормально.

Попробуйте использовать схему аутентификации на основе токенов PyJWT. Чтобы получить токен, вы отправляете учетные данные в конечную точку входа и получаете токен в ответ. Затем вам нужно будет отправлять токен с каждым запросом через заголовки HTTP. Вы часто можете установить это глобально на стороне JS.

Вот несколько ссылок:

примечание: кажется, что Flask-JWT использует библиотеку python itsdangerous, которая некоторое время не обновлялась. Здесь есть обсуждение: https://github.com/mattupstate/flask-jwt/issues/10 Опять же, я не эксперт по безопасности, и кажется, что обе библиотеки по умолчанию обрабатывают кодирование/декодирование с помощью одного и того же алгоритма. PyJWT и Python-Jose перечислены на jwt.io и имеют расширенную функциональность.

person verdverm    schedule 30.09.2015

Ладно, разобрался. Все, что ему нужно, это установить переменную конфигурации Flask для приложения:

WTF_CSRF_ENABLED = False
person petrus-jvrensburg    schedule 29.10.2014
comment
Как это повлияет на ваше основное приложение? Снижает ли это безопасность сайта? - person Gringo Suave; 08.06.2017
comment
Скорее всего, это не то, что нужно использовать. Этот документ может помочь другим пользователям, пришедшим сюда: flask-wtf.readthedocs. io/en/latest/csrf.html#ajax - person daliusd; 11.10.2018