Колонка Python 3 OAuth2 Обратный вызов 403, когда зашифровано печенье Flask и сессия в хранилище данных - PullRequest
0 голосов
/ 27 марта 2019

Мой полный сайт Flask работал нормально, пока я не добавил защищенные заголовки, сохранил сеансы в хранилище данных и зашифровал cookie. Теперь, после того как пользователи войдут в систему с помощью Google Sign-In, они получат 403 на обратный вызов после примерно часа бездействия.

Я написал и заполнил приложение для передачи файлов во Flask, используя стандартную среду выполнения Python 3 App Engine, для пользователей, имеющих внутренний адрес электронной почты компании, который аутентифицирует их с помощью OAuth2. Веб-сайт вообще не нуждается ни в каком состоянии, кроме входа в Google. Поэтому установка cookie не потребовалась бы, если бы Flask не использовал cookie для хранения сеанса.

Перед выпуском приложения я добавил защищенные заголовки, сохранил сеанс в Datastore и заменил интерфейс сеанса модулем EncryptedSession для Flask, который отправляет cookie, зашифрованный с помощью AES-256.

Это было, когда обратный вызов OAuth2 начал давать 403.

Я начал добавлять oauth2.Credentials.refresh() на столько маршрутов, сколько необходимо, но ошибки 403 не изменились.

Это печенье. Я бы хотел, чтобы большая часть этого просто сохранялась в сеансе сервера, но никогда не передавалась в cookie, но не совсем понятно, как.

{
    "_csrf_token"
    "google_oauth2_credentials"
    "google_oauth2_csrf_token"
    "ip"
    "last_seen"
    "session_started"
    "user_email"
    "uuid"
}

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

OAuth2 несовместим с зашифрованным cookie? Проблема в сохранении сеанса в облачном хранилище данных, а не в эфемерном App Engine, который инициализирует диск при каждом запуске виртуальной машины? Есть ли способ обойтись без использования каких-либо файлов cookie и просто повторно проходить аутентификацию пользователя при каждом обновлении? Что вызывает это и что может это исправить?

...