Я использую Keycloak 4.1.0.Final с Spring Boot 2 и хочу аутентифицироваться на конечной точке отдыха /services/{some id}/content/{id}
с токеном на предъявителя. Я взял настройки отсюда: https://www.keycloak.org/docs/4.1/securing_apps/index.html#_spring_boot_adapter
На сервере Keycloak я создал ресурс /services/123/content/{id}
, чтобы можно было получить доступ только к объекту с id = 123. Всем остальным будет отказано.
Теперь, когда я вызываю конечную точку токеном-носителем, токен оценивается дважды. Сначала через KeycloakAuthenticatorValve
, который предоставляет доступ:
05-16-2019 16:04:40 DEBUG org.keycloak.adapters.authorization.AbstractPolicyEnforcer - Авторизация предоставлена для пути
Во-вторых, через KeycloakAuthenticatedActionsFilter
, который запрещает доступ:
16-16-2019 16:04:42 DEBUG org.keycloak.adapters.authorization.KeycloakAdapterPolicyEnforcer - авторизация запрещена - @ [, http-nio-8081-exec-1 @ 304]
Я видел, что AbstractPolicyEnforcer
, вызываемый из KeycloakAuthenticatorValve
, использует путь /services/123/content/{id}
для оценки разрешения. Путь также зарегистрирован на сервере Keycloak.
Но AbstractPolicyEnforcer
, вызываемый из KeycloakAuthenticatedActionsFilter
, использует только контекстный путь /services
, который не зарегистрирован на сервере Keycloak. Таким образом, разрешение не может быть предоставлено.
Кто-нибудь знает, почему токен оценивается несколько раз? Это можно отключить?