Я использую Spring Authorization Server для создания сервера авторизации.
Для сохранения и извлечения авторизаций я реализовал пользовательский сервис авторизации, реализующий интерфейс OAuth2AuthorizationService
. Когда вызывается метод save
, я сохраняю клиента, тип предоставления, авторизованные области, принципала и токены, доступные в объекте authorization
. Я не сохраняю никаких атрибутов объекта авторизации, поскольку не определил никаких пользовательских атрибутов.
Когда я отправляю запрос на конечную точку /authorize
, я получаю обратно code авторизации, и он сохраняется в базе данных, как и ожидалось. Однако, когда я вызываю конечную точку /token
для получения токена доступа, возникает исключение.
Я отследил объект null
OAuth2AuthorizationRequest до метода CodeVerifierAuthenticator.authenticate
:
Поскольку я не сохраняю запрос авторизации, присутствующий как атрибут в объекте авторизации, я не могу извлечь его обратно. Кроме того, я не думаю, что сам запрос авторизации нужно будет сохранять.
Поэтому я хочу подтвердить, действительно ли его нужно сохранять или, может быть, я делаю что-то неправильно.
Я попытался создать новый объект запроса авторизации и назначить его авторизации после извлечения из базы данных. Однако конструктор запросов авторизации доступен только для типа предоставления авторизации и требуемого URI запроса, которые я не хочу жестко codeировать.
java.lang.NullPointerException: Cannot invoke "org.springframework.security.oauth2.core.endpoint.OAuth2AuthorizationRequest.getAdditionalParameters()" because
"authorizationRequest" is null at org.springframework.security.oauth2.server.authorization.authentication.CodeVerifierAuthenticator.authenticate(CodeVerifierAuthenticator.java:97) at org.springframework.security.oauth2.server.authorization.authentication.CodeVerifierAuthenticator.authenticatelfAvailable(CodeVerifierAuthenticator.java:73) at org.springframework.security.oauth2.server.authorization.authentication.ClientSecretAuthentication Provider.authenticate(ClientSecretAuthenticationProvider.java:151) at org.springframework.security.authentication.ProviderManager.authenticate(ProviderManager.java:182) at org.springframework.security.authentication. ObservationAuthenticationManager.lambda$authenticate$1(ObservationAuthenticationManager.java:54)
OAuth2AuthorizationRequest authorizationRequest = (OAuth2AuthorizationRequest)authorization.getAttribute(OAuth2AuthorizationRequest.class.getName());