Как заставить JdbcClientTokenServices хранить токены в источнике данных?

Вот мой код, мне нужно установить для параметра 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;
    }
  1. Я изменил LONGVARBINARY на BLOB для всех случаев в schema.sql, чтобы скрипты работали с MySQL. Я могу убедиться, что моя база данных создана.

  2. template.setAccessTokenProvider (поставщик); без этой строки у меня все еще возникают проблемы с CSRF, потому что поставщик ресурсов не возвращает параметр «состояние».

  3. Я также использую AuthorizationCodeResourceDetails, как и в примере. Я также настраиваю свои accessTokenRequest и clientTokenServices так же, как в примере.

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


person DaShaun    schedule 30.12.2015    source источник
comment
Я столкнулся с той же проблемой stackoverflow.com/questions/34908203/ Вы уже нашли решение, как правильно его реализовать?   -  person alexanoid    schedule 20.01.2016