Нужно ли сохранять OAuth2AuthorizationRequest в методе OAuth2AuthorizationService.save?

Я использую 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()); 

Андрей
Вопрос задан26 апреля 2024 г.

1 Ответ

Ваш ответ

Загрузить файл.