Стоит ли явно проверять токен Keycloak или это делает адаптер Keycloak? - PullRequest
1 голос
/ 15 октября 2019

Существует REST API Spring-boot, который должен быть защищен с помощью Keycloak, приложение использует адаптер Keycloak-Spring-Security (6.0.1).

Вызов на конечную точку API, переноситвдоль токена на предъявителя, полученного от Keycloak (в настоящее время через почтальона).

Я могу выполнить успешный вызов конечной точки REST, но меня беспокоит другое - должен ли я явно проверять токен по открытому ключу?

1 - Адаптер выполняет проверку токена на основе открытого ключа или я должен его реализовать?

2 - Если адаптер делает это - можете ли вы указать, какие классыэто делается?

3 - Если - нет - как должна осуществляться эта проверка? Существуют ли библиотеки Keycloak, которые я могу использовать для проверки токена?

1 Ответ

0 голосов
/ 17 октября 2019

Ну, после нескольких дней поиска в сети ответа - я получил его. Я посмотрел код Keycloak-spring-security-adapter и нашел его.

Прежде всего, я получил рычаг регистрации для Keycloak на DEBUG:

logging.level.org.keycloak=DEBUG

Затем я попытался получить доступмоя конечная точка с плохим токеном (я ожидал, что это приведет к исключению, то есть к более заметному следу; и это произошло):

    2019-10-17 10:18:57,905 | 30860 | http-nio-8081-exec-2 |  |  |  |  | DEBUG |  | org.keycloak.adapters.PreAuthActionsHandler | adminRequest http://localhost:8081/error 
    2019-10-17 10:18:57,906 | 30860 | http-nio-8081-exec-2 |  |  |  |  | DEBUG |  | org.keycloak.adapters.springsecurity.filter.KeycloakAuthenticationProcessingFilter | Request is to process authentication 
    2019-10-17 10:18:57,906 | 30860 | http-nio-8081-exec-2 |  |  |  |  | DEBUG |  | org.keycloak.adapters.springsecurity.filter.KeycloakAuthenticationProcessingFilter | Attempting Keycloak authentication 
    2019-10-17 10:18:57,906 | 30860 | http-nio-8081-exec-2 |  |  |  |  | DEBUG |  | org.keycloak.adapters.BearerTokenRequestAuthenticator | Found [1] values in authorization header, selecting the first value for Bearer. 
    2019-10-17 10:18:57,906 | 30860 | http-nio-8081-exec-2 |  |  |  |  | DEBUG |  | org.keycloak.adapters.BearerTokenRequestAuthenticator | Verifying access_token 
    2019-10-17 10:18:57,908 | 30860 | http-nio-8081-exec-2 |  |  |  |  | DEBUG |  | org.keycloak.adapters.BearerTokenRequestAuthenticator | Failed to verify token 
    2019-10-17 10:18:57,908 | 30860 | http-nio-8081-exec-2 |  |  |  |  | DEBUG |  | org.keycloak.adapters.RequestAuthenticator | Bearer FAILED 
    2019-10-17 10:18:57,908 | 30860 | http-nio-8081-exec-2 |  |  |  |  | DEBUG |  | org.keycloak.adapters.springsecurity.filter.KeycloakAuthenticationProcessingFilter | Auth outcome: FAILED 
    2019-10-17 10:18:57,925 | 30860 | http-nio-8081-exec-2 |  |  |  |  | DEBUG |  | org.keycloak.adapters.springsecurity.filter.KeycloakAuthenticationProcessingFilter | Authentication request failed: org.keycloak.adapters.springsecurity.KeycloakAuthenticationException: Invalid authorization header, see WWW-Authenticate header for details org.keycloak.adapters.springsecurity.KeycloakAuthenticationException: Invalid authorization header, see WWW-Authenticate header for details
        at org.keycloak.adapters.springsecurity.filter.KeycloakAuthenticationProcessingFilter.attemptAuthentication(KeycloakAuthenticationProcessingFilter.java:158)
        at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:212)
        at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
    .....

С этого момента становится ясно, что токен проверяется, еслиЕсли вы посмотрите на участвующие в нем классы, то увидите, что в определенных ситуациях он проверяется по открытому ключу.

В моем случае классы, которые принимают участие в этой аутентификации и проверке (bearer-only)) являются:

org.keycloak.adapters.springsecurity.filter.KeycloakAuthenticationProcessingFilter
org.keycloak.adapters.BearerTokenRequestAuthenticator

Надеюсь, это поможет другим людям, таким как я, найти свой путь в Keycloak.

...