Пользовательские перехватчики авторизации Quarkus - PullRequest
2 голосов
/ 21 июня 2020

У меня есть микросервис Quarkus, выполняющий аутентификацию и авторизацию с помощью Keycloak с использованием расширений quarkus-oid c и quarkus-keycloak-authorization.

Мне нужно дополнительно реализовать следующие два перехватчика / фильтра запросов:

  1. Фильтр перед любым логом аутентификации c срабатывает. Он предназначен для копирования токена из параметра запроса в заголовок (требуется для веб-сокетов). Каким должен быть приоритет этого фильтра?
  2. Фильтр для настраиваемого логина авторизации c. Это должно быть выполнено после всей аутентификации и авторизации keycloak logi c, но непосредственно перед выполнением API? Каким должен быть приоритет этого фильтра?

Я попытался поставить @Priority (Interceptor.Priority.PLATFORM_BEFORE) и @Prematching также на мой фильтр, но даже это вызывается после срабатывания OID C .

Кроме того, есть ли способ поддержать расширение quarkus oid c logi c, чтобы включить собственный код?

Я не могу получить приоритет oid c и keycloak -auth перехватчики (зная, что они могут помочь мне определить приоритет моих фильтров). Пожалуйста, помогите.

1 Ответ

1 голос
/ 21 июня 2020

Получил ответ от групп quarkus google.

Для # 2 этой цели будет служить ContainerRequestFilter с любым приоритетом (не @Prematching). Другой вариант - настроить HttpSecurityPolicy. Это будет вызываться после аутентификации.

package org.acme.security.keycloak.authorization;

import javax.enterprise.context.ApplicationScoped;

import org.jboss.logging.Logger;

import io.quarkus.security.identity.SecurityIdentity;
import io.smallrye.mutiny.Uni;
import io.vertx.ext.web.RoutingContext;

@ApplicationScoped
public class SecurityHandler implements io.quarkus.vertx.http.runtime.security.HttpSecurityPolicy
{
    @Override
    public Uni<CheckResult> checkPermission(RoutingContext request, Uni<SecurityIdentity> identity, AuthorizationRequestContext requestContext)
    {
        Logger.getLogger(LoggingFilter.class).infof("================ custom permission");
        return Uni.createFrom().item(CheckResult.PERMIT);
    }

}

Для # 1 мы можем иметь Vertx @ RouteFilter

Пример фильтра: Сразу отметьте приоритет. Чем выше приоритет, тем сначала он будет вызван.

package org.acme.security.keycloak.authorization;

import io.quarkus.vertx.web.RouteFilter;
import io.vertx.ext.web.RoutingContext;

public class WSAuthFilter
{
    @RouteFilter(1000) 
     void myFilter(RoutingContext rc) {
         rc.request().headers().add("Authorization", rc.request().query());
         rc.next(); 
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...