Вот мой код, мне нужно установить для параметра Mandatory значение «ложь», потому что поставщик ресурсов не возвращает параметр «состояние», как рекомендует спецификация Oauth2.
@Bean
@Scope(value = "session", proxyMode = ScopedProxyMode.INTERFACES)
public OAuth2RestOperations restTemplate() {
OAuth2RestTemplate template = new OAuth2RestTemplate(resource(), new DefaultOAuth2ClientContext(accessTokenRequest));
AuthorizationCodeAccessTokenProvider authorizationCodeAccessTokenProvider = new AuthorizationCodeAccessTokenProvider();
authorizationCodeAccessTokenProvider.setStateMandatory(false);
AccessTokenProviderChain provider = new AccessTokenProviderChain(Arrays.asList(authorizationCodeAccessTokenProvider));
provider.setClientTokenServices(clientTokenServices());
template.setAccessTokenProvider(provider);
return template;
}
Вот код из пример github, который работает с H2:
@Bean
@Scope(value = "session", proxyMode = ScopedProxyMode.INTERFACES)
public OAuth2RestOperations restTemplate() {
OAuth2RestTemplate template = new OAuth2RestTemplate(resource(), new DefaultOAuth2ClientContext(accessTokenRequest));
AccessTokenProviderChain provider = new AccessTokenProviderChain(Arrays.asList(new AuthorizationCodeAccessTokenProvider()));
provider.setClientTokenServices(clientTokenServices());
return template;
}
Я изменил LONGVARBINARY на BLOB для всех случаев в schema.sql, чтобы скрипты работали с MySQL. Я могу убедиться, что моя база данных создана.
template.setAccessTokenProvider (поставщик); без этой строки у меня все еще возникают проблемы с CSRF, потому что поставщик ресурсов не возвращает параметр «состояние».
Я также использую AuthorizationCodeResourceDetails, как и в примере. Я также настраиваю свои accessTokenRequest и clientTokenServices так же, как в примере.
После того, как пользователь авторизует клиент и перенаправляется обратно, код обменивается на токен, и все работает. Я вижу, что у моего клиента есть токен доступа. Я ожидаю, что этот токен доступа также будет храниться в базе данных. Я создаю схему базы данных при запуске, и источник данных настроен правильно. Я также не получаю никаких ошибок во время выполнения, которые указывают на проблемы с конфигурацией. Все остальное работает, как и ожидалось, я просто не получаю никаких данных ни в одной из таблиц, где я ожидаю увидеть информацию о токенах доступа и обновления, отправленных обратно с сервера ресурсов.