Ответ токена доступа: tokenType не может быть нулевым

Я обновляю свою службу и реализую веб-клиент с помощью oAuth2, и я получаю исключение: «tokenType не может быть нулевым», не могли бы вы помочь мне решить эту проблему.

исключение: org.springframework.security.oauth2.core.OAuth2AuthorizationException: [invalid_token_response] Произошла ошибка при попытке получить ответ токена доступа OAuth 2.0: Ошибка при извлечении ответа для типа [class org.springframework.security.oauth2.core.endpoint .OAuth2AccessTokenResponse] и тип содержимого [приложение / json]; вложенное исключение - org.springframework.http.converter.HttpMessageNotReadableException: произошла ошибка при чтении ответа токена доступа OAuth 2.0: tokenType не может иметь значение null; вложенное исключение - java.lang.IllegalArgumentException: tokenType не может быть нулевым


person pawan kumar    schedule 30.10.2019    source источник


Ответы (2)


Взгляните на https://github.com/spring-projects/spring-security/issues/5983#issuecomment-430620308

Это хорошо известная проблема из-за спецификации, которая требует, чтобы тип токена (в нашем случае BEARER) присутствовал в ответе клиенту при нажатии uri доступа к токену, Spring security oauth не влияет на значение по умолчанию в случае отсутствия этого параметр tokentype, вы можете обойтись по ссылке выше.

В спецификации OAuth указано: https://tools.ietf.org/html/rfc6749#section-5.1

5.1. Успешный ответ

Сервер авторизации выдает маркер доступа и необязательный маркер обновления и формирует ответ, добавляя следующие параметры в тело объекта HTTP-ответа с кодом состояния 200 (OK):

ТРЕБУЕТСЯ access_token. Маркер доступа, выданный сервером авторизации.

ТРЕБУЕТСЯ token_type. Тип выпущенного токена, как описано в разделе 7.1. Значение не чувствительно к регистру.

expires_in РЕКОМЕНДУЕТСЯ. Время жизни токена доступа в секундах. Например, значение «3600» означает, что срок действия токена доступа истечет через час с момента создания ответа. Если он не указан, серверу авторизации СЛЕДУЕТ предоставить время истечения срока действия другими способами или задокументировать значение по умолчанию.

person Zakaria Bouazza    schedule 27.04.2020

В конце концов, проблема выяснилась: у клиента отсутствовало одно из полей в ответе на токен json, которое было tokenType. На самом деле tokenType также должен быть включен в ответ на токен, в моем случае tokenType был носителем.

{"access_token": "************", "token_type": "Bearer", "expires_in": 1800, "scope": "read"}

person pawan kumar    schedule 02.12.2019