Проблемы с реализацией TokenProvider для CloudFoundry Java CLI

Я разрабатываю микросервис, который отвечает за запуск других микросервисов, работающих в CloudFoundry. Поэтому я использую cf-java-client (https://github.com/cloudfoundry/cf-java-client). В нашей среде у нас есть специальный механизм для аутентификации пользователей компьютеров в CloudFoundry: я должен предоставить идентификатор клиента и секрет определенной конечной точке, которая возвращает код авторизации. С помощью этого кода я могу создать временные учетные данные для CloudFoundry (которые живут всего 60 минут). До сих пор я реализовал это поведение следующим образом:

  @Bean
  PasswordGrantTokenProvider tokenProvider() {
    final Map<String, String> temporaryCredentialsMap =
        getTemporaryCredentials(clientId, clientSecret);

    return PasswordGrantTokenProvider.builder()
        .username(temporaryCredentialsMap.get("username"))
        .password(temporaryCredentialsMap.get("password"))
        .build();
  }

Теперь моя проблема заключается в том, что по истечении срока действия учетных данных я получаю неверные учетные данные HTTP 401. Я думал воссоздать bean выше. Это возможно? Или есть другие идеи?


person SebastianK    schedule 14.11.2019    source источник
comment
Просто мысль. Может быть, использовать бин с областью видимости? docs.spring. io/spring-framework/docs/current/. Не уверен, что существующие области подходят, но, возможно, вы могли бы создать пользовательскую область, которая соответствует временному окну ваших учетных данных. Если токен недействителен, возвращается новый bean-компонент, в противном случае возвращается тот же bean-компонент с уже действительным токеном.   -  person Daniel Mikusa    schedule 15.11.2019
comment
Спасибо за подсказку. Я попробовал, и это выглядит многообещающе. Я думал о TimedScoped и использовал его для PasswordGrantTokenProvider. Scope сбрасывает свои компоненты каждые 60 минут. Таким образом, учетные данные воссоздаются автоматически.   -  person SebastianK    schedule 16.11.2019


Ответы (1)


Я решил эту проблему, изменив область действия всех bean-компонентов, связанных с cf, на области прототипа и запросив новый bean-компонент из контекста для обновления учетных данных.

person SebastianK    schedule 18.11.2019