Прерывистый нулевой указатель в Auth0 Spring Security (BearerSecurityContextRepository)

#java #spring-security #auth0

#java #spring-безопасность #auth0

Вопрос:

Моя команда использует Auth0 для защиты всех наших служб Spring Boot. Это работает отлично в 99% случаев, однако одна из наших служб завершается сбоем с нулевым указателем при получении запросов.

Это происходит только во время наших сборок CI при использовании образа сборки Linux и запуске тестов @SpringBootTest для службы. На компьютерах разработчиков все в порядке, на образе сборки Windows все в порядке.

Служба сбоя идентична во всех отношениях, которые я могу найти, всем другим нашим службам, так что это для меня большая загадка.

Код, в котором произошел сбой, находится в BearerSecurityContextRepository в библиотеке безопасности Auth0 spring security.

Рассматриваемый код представляет собой этот бит:

 SecurityContext context = SecurityContextHolder.createEmptyContext();
String token = tokenFromRequest(requestResponseHolder.getRequest());
Authentication authentication = PreAuthenticatedAuthenticationJsonWebToken.usingToken(token);
if (authentication != null) {
    context.setAuthentication(authentication);
    logger.debug("Found bearer token in request. Saving it in SecurityContext");
}
  

Объект контекста в строке 5 возвращает значение null и взрывается. Я просмотрел каждую возможную реализацию SecurityContextHolderStrategy, которую мог бы использовать SecurityContextHolder, которая находится в пути к классу, и я не вижу ни одного сценария, в котором вызов createEmptyContext() возвращал бы значение null. Кажется, что каждая реализация просто возвращает новый SecurityContextImpl.

Мне кажется, что проблема вызвана чем-то в среде этого образа сборки Linux (более поздние части нашей сборки требуют, чтобы мы использовали Linux, иначе я бы просто переключился на образ Windows).

Я надеюсь, что кто-то, кто действительно хорошо знает внутренности spring security, мог бы дать мне несколько подсказок относительно того, что может быть причиной проблемы, чтобы я мог глубже разобраться в изображении. Или, если я не на базе, и это что-то другое, указатель на то, что могло бы спасти жизнь.

Спасибо!