Обновление токена доступа OAuth2

Я создаю веб-приложение, которое будет состоять из внутренней и внешней (веб) части. Я хочу ввести аутентификацию между этими двумя частями, и я намерен использовать для этого OAuth2.

Фронтенд будет действовать как клиент OAuth, а бэкэнд будет выступать в роли провайдера OAuth, поэтому бэкэнд будет выдавать токен доступа и обновления.

Мой план состоит в том, чтобы хранить токен обновления, конечно, на стороне бэкенда, и хранить токен доступа на стороне внешнего интерфейса (и отправлять токен доступа с каждым запросом в качестве параметра заголовка). Допустим, токен доступа действует 24 часа, а токен обновления - 3 месяца.

У меня вопрос: когда (и как) мне следует обновить токен доступа, который хранится на стороне интерфейса? (Я спрашиваю об этом, потому что хочу обновить его до истечения срока его действия; не хочу сталкиваться с пользователем с потоком входа в систему, если в этом нет необходимости)

  1. Должен ли я возвращать новый токен доступа после каждого успешного запроса и хранить его на стороне интерфейса (звучит не очень хорошо)
  2. Должен ли я возвращать новый токен доступа, если срок действия существующего просто истекает - вероятно, необходимо проверить на стороне интерфейса, возвращается ли новый токен доступа через параметры заголовка, и если да, то заменить старый.
  3. Должен ли я хранить как токен доступа, так и токен обновления на стороне Frontend, и если токен доступа истек, получить новый с помощью токена обновления
  4. Что-то другое?

Я не уверен, что лучше всего.


person patak    schedule 26.04.2018    source источник
comment
Какой у вас ресурсный сервер? т.е. какой API frontend будет предоставлять access_token для ресурсов? Ваше frontend приложение - это веб-приложение с сервером или одностраничное приложение, работающее в браузере? Какой тип разрешения OAuth вы будете использовать?   -  person iandayman    schedule 27.04.2018


Ответы (1)


Думаю, № 3 - лучший вариант. Если вы храните оба токена (access_token и refresh_token) на передней панели с использованием cookie, вы можете легко проверить их из запроса с помощью метода getCookie.

проверить токен доступа из запроса

  1. if (isAccessTokenExpired) проверить токен обновления из запроса
  2. if (isRefreshTokenExpired) LoginRequiredException (настраиваемое исключение и что-то делать)
  3. иначе обновите оба токена (продлите время или создайте новый токен) и ответ setCookie
  4. иначе просто продолжайте.
person KR_RedBull    schedule 27.04.2018
comment
Срок действия RefreshToken должен быть больше, чем у AccessToken. - person KR_RedBull; 27.04.2018