2013-02-21 3 views
4

Я строю сервер REST и клиент для этого. Теперь мне нужно внедрить стороннюю аутентификацию oauth2. Сейчас я направляю пользователя на сервер, позволяю ему проходить аутентификацию в службе, а затем перенаправляюсь к клиенту, примерно так:Служба REST с третьим лицом OAuth2

Клиент: не аутентифицирован -> Сервер -> Перенаправление на стороннюю сторону -> Перенаправление на сервер -> Перенаправление в приложение.

Затем я храню файл cookie на клиенте для идентификации пользователя (cookie отправляется с использованием Credentials и CORS).

Моя проблема теперь в том, что я должен сделать с повторной аутентификацией, когда истекает срок действия токена? Поскольку клиент и сервер обмениваются данными только через json, мне придется снова инициировать полный процесс аутентификации, и поэтому пользователь потеряет все состояние в приложении. Есть ли у кого-нибудь предложение о том, как обойти эту проблему? Лучше ли выполнять аутентификацию на стороне клиента и хранить токен доступа на сервере или что-то еще?

ответ

1

Независимо от того, что вы сделали, это правильный способ получить OAuth access_token. А ваш access_token является временным, так что срок истечения.

Я думаю, что вы можете сделать что-либо из них:

  1. Проверьте сервер авторизации (который используется для получения токена) предоставляет возможность получить более длинный маркер продолжительности использования вашего access_token. Это также предлагается в спецификации OAuth 2.

  2. Попробуйте сохранить состояние пользователя без использования сеанса.

+0

Правильно, поэтому я думаю, что лучшего решения нет. Получение более длинного токена действительно не устраняет проблему, но делает процесс повторной аутентификации менее частым. Сохранение состояния, конечно, возможно (так как все уже клиентская сторона), но и тяжелая проблема. Я думал, возможно, используя window.open() для потока повторной аутентификации, но он также не является оптимальным. Как насчет iframe? – cpojer

+0

Состояние хранения не так сложно; вы можете хранить информацию о состоянии пользователя в своем приложении. я не пробовал с iframe, но кажется, что стоит попробовать. –

+0

Это зависит от того, о каком состоянии мы говорим. Я имею в виду текущее состояние приложения, вплоть до последнего щелчка пользователя. Это определенно не тривиальная проблема, если приложение достаточно сложное. – cpojer

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