Кваркус 403 Запрещенный ответ

#kotlin #quarkus

Вопрос:

У меня есть простое приложение Quarkus, написанное на Котлине. В моем файле application.properties у меня есть:

 # Add authentication quarkus.http.auth.proactive=false quarkus.http.auth.permission.authenticated.paths=/* quarkus.http.auth.permission.authenticated.policy=authenticated  # Allow some paths quarkus.http.auth.permission.allowed.paths=/health/* quarkus.http.auth.permission.allowed.policy=permit quarkus.http.auth.permission.allowed.methods=GET  

Я в основном пытаюсь аутентифицировать все пути, кроме /health

Я попытался создать пользовательский механизм httpauthenticationмеханизм, так как мне нужна пользовательская логика для аутентификации.

 @ApplicationScoped class SecurityCustomAuth : HttpAuthenticationMechanism {  override fun authenticate(  context: RoutingContext?,  identityProviderManager: IdentityProviderManager? ): Unilt;SecurityIdentity?gt;? {  logger.info("====== custom auth")  //some logic }  

Когда я пытаюсь вызвать любой URL, кроме /health, я получаю сообщение об ошибке 403, и пользовательский метод аутентификации никогда не вызывается. Почему?

РЕДАКТИРОВАТЬ: Похоже, что это не имеет никакого отношения к моему пользовательскому механизму аутентификации, даже если я полностью удалю его, я все равно получу код ответа 403 со свойствами, упомянутыми выше, вместо 401.

Комментарии:

1. Привет, authenticated политика требует удостоверения безопасности с любыми ролями или вообще без них, это похоже на @PermitAll . Он применяется на уровне управления доступом на основе ролей, и вот почему вы видите 403 . Только механизмы аутентификации могут заставить 401. Я понимаю, почему это может сбивать с толку — но если вы подумаете об этом, одна только политика не может обеспечить аутентификацию пользователей, механизм должен обеспечить ее соблюдение. Однако не уверен, почему ваш пользовательский механизм не вызывается. Не могли бы вы, пожалуйста, открыть выпуск Quarkus, если возможно, с помощью репродуктора ? У нас есть механизм тестовой аутентификации, называемый в тестах

2. Привет и спасибо за ваш ответ, что еще более странно, но, возможно, помогает в отладке, так это то, что если я добавлю в проект quarkus-smallrye-jwt и jwt-build, мой механизм аутентификации будет вызван и он будет работать так, как ожидалось.. за исключением того, что 1. кажется неправильным добавлять эти зависимости и 2. теперь /health также вызывает аутентификацию, даже если proactive является ложным, чего, как я понимаю, не должно быть.

3. Можете ли вы открыть проблему и объяснить, как вы реализуете свой пользовательский механизм ? Могут возникнуть некоторые проблемы, если передача учетных данных является пользовательской и представляет собой только один механизм

4. На самом деле, ваш комментарий о передаче учетных данных помог мне решить проблему. Для запроса на аутентификацию, который я использовал, не было доступных поставщиков удостоверений личности. На самом деле я не использовал IdentityProvider, я просто аутентифицировался непосредственно с помощью пользовательского механизма HttpAuthenticationMechanism, но, тем не менее, это требовалось, и я не знал. На данный момент я возвращаю тип учетных данных emptySet (), но в будущем я должен реализовать свой собственный IdentityProvider. Большое спасибо!

5. Np, пожалуйста, рассмотрите возможность открытия запросов на улучшение документа