MismatchingStateError: mismatching_state: CSRF Внимание! Состояние не равно по запросу и ответуPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 MismatchingStateError: mismatching_state: CSRF Внимание! Состояние не равно по запросу и ответу

Сообщение Anonymous »

Это сводит меня с ума и не позволяет мне выполнять локальную разработку/тестирование.

У меня есть приложение flask, которое использует authlib (только возможности клиента) . Когда пользователь заходит на мою домашнюю страницу, мой сервер flask перенаправляет его на /login, который, в свою очередь, перенаправляет на Google Auth. Затем Google Auth отправляет их обратно в конечную точку /auth моего приложения.

В течение нескольких месяцев у меня возникали периодические проблемы с authlib.integrations.base_client.errors.MismatchingStateError: mismatching_state: Внимание CSRF! Состояние не равное по запросу и ответу. Это похоже на проблему с файлами cookie, и большую часть времени я просто открываю новое окно браузера или в режиме инкогнито или пытаюсь очистить кеш, и в конечном итоге это вроде как работает.

Однако Сейчас я запускаю то же самое приложение внутри докер-контейнера, и на каком-то этапе это работало. Я понятия не имею, что я изменил, но всякий раз, когда я просматриваю локальный хост/или 127.0.0.1/ и прохожу процесс аутентификации (каждый раз очищая файлы cookie, чтобы убедиться, что я не вхожу в систему автоматически), меня постоянно перенаправляют обратно на локальный хост. /auth?state=бла-бла-бла, и у меня возникла эта проблема:
authlib.integrations.base_client.errors.MismatchingStateError: mismatching_state: CSRF Внимание! Состояние не равно в запросе и ответе.

Я думаю, что соответствующая часть моего кода:

@app.route("/", defaults={"path": ""})
@app.route("/
")
def catch_all(path: str) -> Union[flask.Response, werkzeug.Response]:
if flask.session.get("user"):
return app.send_static_file("index.html")
return flask.redirect("/login")

@app.route("/auth")
def auth() -> Union[Tuple[str, int], werkzeug.Response]:
token = oauth.google.authorize_access_token()
user = oauth.google.parse_id_token(token)
flask.session["user"] = user
return flask.redirect("/")

@app.route("/login")
def login() -> werkzeug.Response:
return oauth.google.authorize_redirect(flask.url_for("auth", _external=True))


Буду очень признателен за любую помощь.

Когда я запускаю локально, я начинаю с:

export FLASK_APP=foo && flask run


Когда я запускаю внутри Docker-контейнера, я начинаю с:

.venv/bin/gunicorn -b :8080 --workers 16 foo


Подробнее здесь: https://stackoverflow.com/questions/619 ... l-in-reque
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»