Привет
Я обновляю свое приложение до Spring Boot 2.4.1, но, к сожалению, столкнулся с проблемой зависимости.
Я понизил версию библиотеки nimbus до 7.1 согласно другим сообщениям, но похоже, что сама безопасность Spring полагается на другую версию. Само по себе не было билета об этом, и хотелось посмотреть, есть ли простое решение, пока (над # 17808 или # 17986 работают). Я не был уверен, что # 17808 определенно решит проблему, но есть ли пока решение?
Соответствующие части из моих файлов pom:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.1</version>
<relativePath/>
</parent>
<dependency>
<groupId>com.microsoft.azure</groupId>
<artifactId>azure-active-directory-spring-boot-starter</artifactId>
<version>2.3.5</version>
</dependency>
<dependency>
<groupId>com.microsoft.azure</groupId>
<artifactId>azure-spring-boot-starter</artifactId>
<version>2.3.5</version>
</dependency>
<!-- adding to ensure compatibility -->
<dependency>
<groupId>com.nimbusds</groupId>
<artifactId>nimbus-jose-jwt</artifactId>
<version>7.9</version>
</dependency>
Приложение теперь запускается (не было без перехода на 7.9 nimbus), но теперь оно терпит неудачу в процессе аутентификации / авторизации:
java.lang.NoSuchMethodError: 'void com.nimbusds.jose.proc.JWSVerificationKeySelector.<init>(java.util.Set, com.nimbusds.jose.jwk.source.JWKSource)'
at org.springframework.security.oauth2.jwt.NimbusJwtDecoder$JwkSetUriJwtDecoderBuilder.jwsKeySelector(NimbusJwtDecoder.java:333)
at org.springframework.security.oauth2.jwt.NimbusJwtDecoder$JwkSetUriJwtDecoderBuilder.processor(NimbusJwtDecoder.java:348)
at org.springframework.security.oauth2.jwt.NimbusJwtDecoder$JwkSetUriJwtDecoderBuilder.build(NimbusJwtDecoder.java:361)
at org.springframework.security.oauth2.client.oidc.authentication.OidcIdTokenDecoderFactory.buildDecoder(OidcIdTokenDecoderFactory.java:167)
at org.springframework.security.oauth2.client.oidc.authentication.OidcIdTokenDecoderFactory.lambda$createDecoder$3(OidcIdTokenDecoderFactory.java:129)
at java.base/java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1705)
at org.springframework.security.oauth2.client.oidc.authentication.OidcIdTokenDecoderFactory.createDecoder(OidcIdTokenDecoderFactory.java:128)
at org.springframework.security.oauth2.client.oidc.authentication.OidcIdTokenDecoderFactory.createDecoder(OidcIdTokenDecoderFactory.java:66)
at org.springframework.security.oauth2.client.oidc.authentication.OidcAuthorizationCodeAuthenticationProvider.createOidcToken(OidcAuthorizationCodeAuthenticationProvider.java:235)
at org.springframework.security.oauth2.client.oidc.authentication.OidcAuthorizationCodeAuthenticationProvider.authenticate(OidcAuthorizationCodeAuthenticationProvider.java:154)
at org.springframework.security.authentication.ProviderManager.authenticate(ProviderManager.java:182)
at org.springframework.security.oauth2.client.web.OAuth2LoginAuthenticationFilter.attemptAuthentication(OAuth2LoginAuthenticationFilter.java:192)
at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:222)
at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:212)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)
at org.springframework.security.oauth2.client.web.OAuth2AuthorizationRequestRedirectFilter.doFilterInternal(OAuth2AuthorizationRequestRedirectFilter.java:178)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)
at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:103)
at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:89)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)
at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90)
at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)
at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:110)
at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:80)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)
at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:55)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)
at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:211)
at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:183)
at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:358)
at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:271)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.springframework.session.web.http.SessionRepositoryFilter.doFilterInternal(SessionRepositoryFilter.java:141)
at org.springframework.session.web.http.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:82)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:93)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:103)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:374)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:888)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1597)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.base/java.lang.Thread.run(Thread.java:829)
Привет, @chrisburrell , теперь azure-spring-boot-starter
не поддерживает spring-boot-2.4.x, не могли бы вы сейчас использовать spring-boot2.3.5?
После объединения https://github.com/Azure/azure-sdk-for-java/pull/17808 мы выпустим новую версию GA, и проблема будет устранена.
Следующая версия GA выйдет до конца 2021 г.
@chenrujun в качестве билета, который вы упомянули, вероятно, недействителен (эти версии несовместимы), есть ли у вас обходной путь, как использовать spring -boot 2.4.x с лазурной весенней загрузкой (в настоящее время мы используем azure-spring-boot-bom 2.3 .5)?
@bilak , мы только что выпустили 3.0.0
, попробуйте следующее:
<dependency>
<groupId>com.azure.spring</groupId>
<artifactId>azure-spring-boot-starter-active-directory</artifactId>
<version>3.0.0</version>
</dependency>
3.0.0 is
прежнему работают для весенней загрузки 2.2 - 2.3.
Мы выпустим 3.2.0
для spring -boot 2.4.x до конца этого месяца, вы можете дождаться релиза.
Ссылки: https://repo.maven.apache.org/maven2/com/azure/spring/azure-spring-boot-starter-active-directory/
@chenrujun Я только что написал об этом вопросе, потому что он имеет название "
И дело не только в библиотеке активных каталогов.
@bilak
Извините, что мы столкнулись с проблемой при обновлении до весенней загрузки 2.4.0.
Ссылки: https://github.com/Azure/azure-sdk-for-java/pull/17905
Вы можете выбрать один из вариантов:
azure-spring-boot-starter-active-directory 3.0.0
, проверьте, хорошо ли он работает с Spring-boot 2.4.azure-spring-boot-starter-xxx 3.2.0
. который работает для весенней загрузки 2.4.Привет,
azure-spring-boot-starter-active-directory 3.0.0
тоже не работает ...
Вы - мой последний шаг к тому, чтобы в продукте была готовая реактивная версия :-)
С наилучшими пожеланиями,
Привет, @Tcharl .
Вы - мой последний шаг к тому, чтобы в продукте была готовая реактивная версия :-)
Вы имеете в виду, что используете Интернет в реактивном стеке ? В настоящее время мы не поддерживаем реагирование для наших стартеров.
Однако мне удалось использовать spring-boot-oauth2-client вместо выделенной библиотеки azad (какова добавленная стоимость библиотеки Microsoft?). App Insight sdk - последний проблемный ...
@Tcharl
в чем добавленная стоимость от Microsoft?
Мы поддерживаем другие функции, такие как:
Ссылки:
+1 по этому поводу. Spring Boot 2.4.2 с Azure SDK приводит к следующему исключению classnotfound (версия oidc, используемая в Azure, слишком старая):
2021-01-25, 07:30:36 ERROR java.lang.ClassNotFoundException: com.nimbusds.oauth2.sdk.http.CommonContentTypes
at java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:471)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:589)
at org.springframework.boot.loader.LaunchedURLClassLoader.loadClass(LaunchedURLClassLoader.java:151)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
at com.microsoft.aad.adal4j.AdalTokenRequest.toOAuthRequest(AdalTokenRequest.java:158)
at com.microsoft.aad.adal4j.AdalTokenRequest.executeOAuthRequestAndProcessResponse(AdalTokenRequest.java:86)
at com.microsoft.aad.adal4j.AuthenticationContext.acquireTokenCommon(AuthenticationContext.java:930)
at com.microsoft.aad.adal4j.AcquireTokenCallable.execute(AcquireTokenCallable.java:70)
at com.microsoft.aad.adal4j.AcquireTokenCallable.execute(AcquireTokenCallable.java:38)
at com.microsoft.aad.adal4j.AdalCallable.call(AdalCallable.java:47)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
at java.base/java.lang.Thread.run(Thread.java:834)
Пожалуйста, обновите следующие зависимости:
<dependency>
<groupId>com.nimbusds</groupId>
<artifactId>oauth2-oidc-sdk</artifactId>
<version>${oauth2-oidc-sdk.version}</version>
</dependency>
<dependency>
<groupId>com.nimbusds</groupId>
<artifactId>nimbus-jose-jwt</artifactId>
<version>${nimbus-jose-jwt.version}</version>
</dependency>
Получил работу, используя следующие версии: (в этом случае работают как spring oauth2, так и Azure SDK)
<microsoft-azure.version>1.38.1</microsoft-azure.version>
<nimbus-jose-jwt.version>9.4.1</nimbus-jose-jwt.version>
<oauth2-oidc-sdk.version>7.5</oauth2-oidc-sdk.version>
<spring.boot.version>2.4.2</spring.boot.version>
oauth2-oidc-sdk
больше или равно 8.x
не работает.
Надеюсь, вы, ребята, обновите это быстро, так как это грязный хак / сложно поддерживать несоответствия в зависимостях maven.
@jloisel .
Мы работаем над этим. Подождите, пока выйдет следующий выпуск.
Ссылки: https://github.com/Azure/azure-sdk-for-java/blob/feature/core/reactorupgrade/eng/versioning/external_dependencies.txt#L224
Спасибо! Вы можете перейти на Spring Boot 2.4.2
, Nimbus 9.4.1
и oidc 8.34.2
. Ваши "обновленные" зависимости уже устарели.
@jloisel
Спасибо за информацию.
Ваши "обновленные" зависимости уже устарели.
Это просто обновление версии патча. Нам легко обновить версию патча.
@chenrujun есть новости о выпуске, совместимом с весенней загрузкой 2.4.x?
@bilak
Если все пойдет хорошо, мы выпустим новую версию, совместимую с spring -boot 2.4.x, в конце этого месяца.
Вот подробности:
Ядро реактора 3.4.3
теперь доступно.
@jloisel
Спасибо за информацию.
В этом месяце завершился регулярный выпуск некоторых модулей в этом репозитории.
Чтобы модули использовали одну и ту же версию, со следующего месяца можно использовать реактор-ядро 3.4.x.
Таким образом, мы не сможем поддерживать spring-boot 2.4.x до регулярного выпуска в следующем месяце.
Пожалуйста, подождите.
Извините за доставленные неприятности.
@chenrujun, так что у нас следующий месяц, пожалуйста, каков статус? Мы будем ждать следующего месяца? : D
@bilak
Текущий план заключается в том, что мы выпустим azure-spring-boot-starter-active-directory:3.3.0
до 2021-03-11, что будет работать с spring-boot:2.4.3
@chenrujun как насчет других библиотек? azure-spring-boot-bom
основном.
@bilak будут выпущены и другие библиотеки. Для пружинного башмака 2.4.
Привет, @chenrujun ,
@raniemi , мартовский выпуск.
Закрытие этой проблемы, поскольку выпущена версия 3.3.0, которая поддерживает Spring- boot: 2.4.3.
Это не решено, поскольку другие лазурные артефакты полагаются на adal4j:
https://mvnrepository.com/artifact/com.microsoft.azure/adal4j/1.6.6
Что, в свою очередь, все еще зависит от старой версии oauth2-oidc-sdk
. Конфликт зависимостей по-прежнему сохраняется, если вы пытаетесь использовать клиент Azure в приложении с весенней загрузкой.
@jloisel
Извините, я не могу понять вашу точку зрения.
Не могли бы вы проверить наш образец проекта ?
Это не зависит от adal4j:
По поводу oauth2-oidc-sdk конфликта нет:
То же, что и nimbus-jose-jwt:
Автономный клиент Azure по-прежнему зависит от него:
https://mvnrepository.com/artifact/com.microsoft.azure/adal4j/1.6.4/usages?p=1
Мы используем клиент Azure:
<dependency>
<groupId>com.microsoft.azure</groupId>
<artifactId>azure</artifactId>
<version>1.40.0</version>
</dependency>
И он по-прежнему транзитивно зависит от adal4j, который, в свою очередь, зависит от старых версий oidc и nimbus.
Простой поиск показывает, что в разных местах все еще есть код, зависящий от adal4j:
https://github.com/Azure/azure-sdk-for-java/search?q=adal4j
Я потратил некоторое время, пытаясь понять, какую зависимость использовать для запуска / остановки виртуальных машин в Azure, но это действительно озадачивает, учитывая, сколько существует артефактов. В руководстве по миграции также не указано, какие зависимости использовать, он просто содержит некоторый код.
РЕДАКТИРОВАТЬ: нашел несколько образцов:
https://github.com/Azure-Samples/compute-java-manage-vm/blob/master/src/main/java/com/azure/resourcemanager/compute/samples/ManageVirtualMachine.java
Похоже, нам нужно использовать клиент 2.x.
Привет @jloisel
Почему вы используете com.microsoft.azure:azure
? Я имею в виду, для чего вы его используете?
Я думаю, вам следует использовать com.azure.resour cemanager: xxx .
Похоже, нам нужно использовать клиент 2.x.
Вы имеете в виду, что теперь хотите использовать com.azure.resourcemanager:xxx
?
Привет,
Мы думали, что это правильный клиент, но ошибались. Я перенес нашу кодовую базу, чтобы использовать azure-resourcemanager-compute
вместе с azure-identity
.
Мы используем клиент Azure для автоматического запуска / остановки экземпляров в Azure в зависимости от потребностей клиента.
Мы используем клиент Azure для автоматического запуска / остановки экземпляров в Azure в зависимости от потребностей клиента.
Привет, @saragluna .
ИДУ,
azure
- библиотека дорожки 1,
нам следует избегать использования библиотеки трека 1.
Есть ли у нас библиотека дорожки 2 для запуска / остановки экземпляров в Azure?
@jloisel
Мы используем клиент Azure для запуска / остановки экземпляров в Azure
Azure client
вы говорили, относится к библиотеке azure-resourcemanager-compute
?
До сих пор мы использовали библиотеку трека 1. Вот почему у нас были проблемы с конфликтами nimbus / oidc при загрузке Spring:
<strong i="6">@Override</strong>
public AzureClient newClient(final AzureAccount account) {
final ApplicationTokenCredentials credentials = new ApplicationTokenCredentials(
account.getClientId(),
account.getTenantId(),
account.getClientSecret(),
ENVS.getOrDefault(account.getEnvironment(), AZURE));
final Authenticated auth = Azure.authenticate(credentials);
final Azure c = auth.withSubscription(account.getSubscriptionId());
return new ImmutableAzureClient(
c.disks(),
c.networks(),
c.virtualMachines(),
c.publicIPAddresses(),
c.networkInterfaces(),
c.galleries()
);
Теперь мы используем клиент трека 2:
<strong i="10">@Override</strong>
public AzureClient newClient(final AzureAccount acc) {
final TokenCredential credential = new ClientSecretCredentialBuilder()
.clientId(acc.getClientId())
.clientSecret(acc.getClientSecret())
.tenantId(acc.getTenantId())
.build();
final AzureEnvironment env = ENVS.getOrDefault(acc.getEnvironment(), AZURE);
final AzureProfile profile = new AzureProfile(acc.getTenantId(), acc.getSubscriptionId(), env);
final ComputeManager compute = ComputeManager
.configure()
.withLogLevel(BASIC)
.authenticate(credential, profile);
final NetworkManager network = NetworkManager
.configure()
.withLogLevel(BASIC)
.authenticate(credential, profile);
return new ImmutableAzureClient(
compute.disks(),
network.networks(),
compute.virtualMachines(),
network.publicIpAddresses(),
network.networkInterfaces(),
compute.galleries()
);
Мы перешли от использования azure
артефакта azure-resourcemanager-compute
библиотеки.
@jloisel
Возникли ли у вас проблемы после использования библиотеки трека 2?
Теперь он работает нормально. : +1:
Самый полезный комментарий
Ядро реактора
3.4.3
теперь доступно.