Как токен обновления OAuth работает на стороне клиента?

#java #spring-security #oauth-2.0 #oauth #spring-security-oauth2

#java #spring-безопасность #oauth-2.0 #oauth #spring-security-oauth2

Вопрос:

Я внедрил сервер Spring Oauth 2 и добавил авторизацию к одному из своих сервисов. Я хочу понять, когда я нажимаю :

 localhost:9191/oauth/token?grant_type=passwordamp;username=krishamp;password=kpass
 

Я получаю такой ответ :

 {
    "access_token": "24a20377-2ce7-4c6c-a65c-87adf443854b",
    "token_type": "bearer",
    "refresh_token": "39da80da-83bb-49e1-8e6a-8432428637ad",
    "expires_in": 59,
    "scope": "READ WRITE"
}
 

и я использую тот же access_token для аутентификации моего клиента следующим образом :

 localhost:8080/getName
Adding header :
Authorization : bearer 24a20377-2ce7-4c6c-a65c-87adf443854b
 

Итак, мой вопрос: через 60 секунд (время истечения срока действия), как мой клиент получит новый токен с помощью токена обновления? (Я предполагаю, что клиент находится в том же сеансе).
Обрабатывает ли spring его внутренне со своими библиотеками или что-то, что нам нужно добавить на сервер?
Пожалуйста, помогите!

Ответ №1:

Клиент отправит сообщение о предоставлении токена обновления, как описано в этой статье . В OAuth гранты — это то, что дает вам токены:

  • Вы реализовали предоставление пароля выше
  • Большинство пользовательских интерфейсов используют предоставление кода авторизации после входа пользователя в систему
  • Предоставление токена обновления используется для автоматического обновления, когда токены доступа истекают

Сообщения о предоставлении обычно всегда представляют собой запросы POST к конечной точке токена. Большинство людей используют готовый сервер авторизации, который обрабатывает их за вас, поэтому вам не нужно писать код самостоятельно.

Комментарии:

1. ТАКИМ образом, клиент автоматически попадет в HttpResponse<String> response = Unirest.post(» localhost:9191/oauth/token ) .header(«content-type», «application /x-www-form-urlencoded») .body(«grant_type=refresh_tokenamp;client_id=mobileamp;client_secret=pinamp;refresh_token=REFRESH_TOKEN) .asString(); когда срок действия токена истек? и получить новый токен?

2. Да — обычно клиент получает ответ 401 от API, когда истекает токен доступа. Затем клиент отправит вышеупомянутое сообщение о предоставлении токена обновления, чтобы получить новый токен доступа, а затем повторит вызов API. Вот несколько примеров клиентского кода .