Как реализовать функцию запомнить меня в Oauth 2.0 с refresh_token? - PullRequest
0 голосов
/ 27 мая 2019

Я прочитал много материалов, в том числе RFC OAuth 2.0, чтобы сделать безопасный вход в систему с использованием этого протокола.Поток, который я реализовал, - это предоставление кода авторизации, потому что у меня есть защищенный серверный CORE для хранения секрета клиента.Я реализовал протокол, как описано в RFC или в других листах рабочего процесса реализации Oauth 2.0.

На данный момент у меня есть access_token и refresh_token, но я хочу реализовать функцию запоминания мной.Я думал об этом по-разному, но я не понимаю, как реализовать это безопасным способом.

Если я сохраню обновление на куки-файлах безопасности http браузера через сервер, я уязвим дляатака CSRF, и если я сохраню ее в локальном хранилище, еще хуже, потому что я уязвима для атак XSS, и ее можно украсть.

Проще говоря, мне нужно смягчить уязвимости XSS и CSRF, имеязапомнить меня функциональность.(Я также подумал об использовании атрибута cookie одного и того же сайта в браузерах, чтобы смягчить уязвимость CSRF, но мне нужно обеспечить совместимость, и эта функция доступна только в последней версии браузеров).

Мой вопрос: как мне реализовать функцию «Помни меня», также заботясь о аспектах безопасности?

1 Ответ

0 голосов
/ 29 мая 2019

Если ваше приложение имеет уязвимость XSS, то не имеет значения, храните ли вы токен в памяти (переменная) или в localStorage. У вредоносного кода не будет проблем с доступом к нему. Поэтому я думаю, что сохранение информации «запомнить меня» в localStorage не снижает ваш текущий уровень безопасности. Чтобы защитить свое приложение от XSS-атак, вы можете использовать такие вещи, как Content Security Policy, так что будет выполняться только тот код JavaScript, которому вы доверяете. Для получения дополнительной информации см. Шпаргалку по профилактике OWASP XSS .

Я думаю, вы могли бы хранить свой токен доступа в sessionStorage вместо переменной, чтобы пользователям не приходилось входить в систему при перезагрузке страницы.

Если вы сохраните информацию «запомнить меня» в файле cookie только для HTTP, это может сделать ваше приложение уязвимым для CSRF-атак, но, опять же, есть способы предотвратить это ( OWASP CSRF предотвращение ), например как CORS и отправка дополнительного токена в каждом запросе, который должен быть прочитан из файла cookie с помощью кода JavaScript.

Функциональность «запомнить меня» может добавить некоторый риск, поскольку пользователи остаются в системе в течение длительного времени. Поэтому вы должны оценить баланс между рисками и удобством для пользователей.

Вы можете взглянуть на OAuth 2.0 для приложений на основе браузера . Он не обсуждает функциональность «помни меня», но обсуждает передовой опыт и соображения безопасности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...