2016-06-29 5 views
3

У меня есть веб-приложение, которое будет обрабатывать аутентификацию с помощью OAuth2. После аутентификации веб-приложение имеет токен и может получить доступ к ресурсам. Однако, если пользователь обновляет страницу или закрывает браузер и возвращается позже, токен теряется, и пользователь должен снова войти в систему. Что очень плохо с точки зрения пользователя.Как отправить токен доступа OAuth2 на обновление страницы?

Кроме того, код на стороне сервера проверяет, зарегистрирован ли пользователь и отправляет основную страницу приложения, только если пользователь вошел в систему. Если он не является, он будет перенаправлен на страницу входа.

Поскольку токен OAuth2 отправляется на сервер в качестве заголовка, браузер не будет отправлять токен, когда пользователь вводит имя сайта в адресную строку.

Я планирую отправить токен доступа в файлы cookie. Это правильное решение?

ответ

1

Возможно, вы захотите установить токен доступа в качестве заголовка по умолчанию каждого HTTP-запроса, отправляемого в API-интерфейс тура или сервера, в hook.ready() или ComponentDidMount(), если вы используете React.

После этого вы можете начать выборку данных с использованием предпочтительной библиотеки (например, axios) или Fetch, когда приложение будет готово.

Для этого вы просто сохраняете токен доступа в локальном хранилище в первый раз, а затем извлекаете его на window.ready(). Вы сделаете это в Контейнерном компоненте приложения или в теге скрипта в файле index.html.

Это решение не позволит вам выполнять гидратацию на стороне сервера для защищенных маршрутов, особенно если ваши данные поступают из автономного API. Единственный способ решения проблемы гидратации на стороне сервера при использовании таких решений - установить токен доступа пользователя в качестве параметра строки запроса в URL-адресе, таким образом браузер может передать его на сервер, даже не выполняя javascript; но есть очевидные недостатки безопасности, связанные с этим.

Надеюсь, это поможет, ура.

+0

Как насчет того, когда пользователь вводит имя веб-сайта в адресную строку браузера? Как отправить токен доступа в этом случае? – zarax

+0

Мы говорим о обеспеченных маршрутах здесь. А именно, будут публичные маршруты, которые предоставляют публично доступные данные пользователю, и не нуждаются в токена доступа, которые будут выбраны, и частные, которые делают. Если на вашей домашней странице нужно получить ограниченные данные для пользователя, я предлагаю вам удалить данные на стороне сервера для этих маршрутов и продолжить выборку на стороне клиента через запросы AJAX. В этом случае токен будет извлекаться из локального хранилища и отправляться в виде заголовка в вашем HTTP-запросе. – xechelonx

+0

Мне нужна маркер доступа на домашней странице, чтобы пользователь мог перейти непосредственно в приложение, если его сеанс продолжается. Вы предлагаете мне сохранить токен в локальном хранилище, поэтому нет причин не сохранять файлы cookie. Спасибо – zarax

Смежные вопросы