Использование переменной сеанса Flask для предотвращения OAUTH CSRFPython

Программы на Python
Ответить
Anonymous
 Использование переменной сеанса Flask для предотвращения OAUTH CSRF

Сообщение Anonymous »

Я пытаюсь написать простое (ха!) Приложение Python Flask, которое будет использовать API Google People для получения числового идентификатора Google ID пользователя (который иначе определить практически невозможно). Для этого необходимо, чтобы пользователь прошел аутентификацию с помощью OAUTH Google. У меня это работает, но в документации Google по использованию OAuth 2.0 для веб-серверных приложений говорится:

Клиент OAuth должен предотвращать CSRF, как это указано в OAuth2
Спецификация. Один из способов добиться этого — использовать параметр state
, чтобы поддерживать состояние между вашим запросом авторизации и ответом сервера авторизации
.

Итак, я следую этому примеру и сохраняю состояние в переменной сеанса.

Код: Выделить всё

@app.route('/auth')
def auth():
auth_url, state = get_oauth_flow().authorization_url()
app.logger.debug(f'Setting session state: {state}')
flask.session['state'] = state
return flask.redirect(auth_url)

@app.route('/oauth2callback')
def oauth2callback():
session_state = flask.session.get('state')
request_state = flask.request.args.get('state')
app.logger.debug(f'Got session state: {session_state}')
app.logger.debug(f'Got request state: {request_state}')
if session_state is None or session_state != request_state:
return 'Danger, Will Robinson!', 400
del flask.session['state']
flow = get_oauth_flow()
flow.fetch_token(authorization_response=flask.request.url)
flask.session['oauth_token'] = flow.credentials.token
return flask.redirect('success')
Это не удается каждый раз, когда я прохожу процесс первоначального входа в систему. (Я получаю сообщение «Опасно, Уилл Робинсон!».) Мои журналы показывают, что переменная сеанса очищена.

Код: Выделить всё

DEBUG in ging: Setting session state: ijV2BAyuZG8uSO4rpN77nczw5UDEJf
DEBUG in ging: Got session state: None, referer: https://accounts.youtube.com/
DEBUG in ging: Got request state: ijV2BAyuZG8uSO4rpN77nczw5UDEJf, referer: https://accounts.youtube.com/
Я не веб-разработчик по профессии, поэтому здесь я очень в море. Будем признательны за любые предложения о том, что я делаю неправильно и/или о других подходах.

Подробнее здесь: https://stackoverflow.com/questions/792 ... prevention
Ответить

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

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

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

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

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