#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, мог бы дать мне несколько подсказок относительно того, что может быть причиной проблемы, чтобы я мог глубже разобраться в изображении. Или, если я не на базе, и это что-то другое, указатель на то, что могло бы спасти жизнь.
Спасибо!