Authorization Quarkus自定义授权拦截器

Authorization Quarkus自定义授权拦截器,authorization,openid-connect,interceptor,quarkus,requestfiltering,Authorization,Openid Connect,Interceptor,Quarkus,Requestfiltering,我有一个Quarkus微服务使用Quarkus oidc和Quarkus KeyClope授权扩展使用KeyClope进行身份验证和授权 我还需要实现以下两个请求拦截器/过滤器: 任何身份验证逻辑启动之前的筛选器。这是将令牌从查询参数复制到标头(web套接字需要)。此筛选器的优先级应该是什么 具有自定义授权逻辑的筛选器。这应该在所有身份验证和keydapore授权逻辑之后执行,但就在API执行之前?这个过滤器的优先级应该是什么 我尝试将@Priority(之前是Interceptor.Prior

我有一个Quarkus微服务使用Quarkus oidc和Quarkus KeyClope授权扩展使用KeyClope进行身份验证和授权

我还需要实现以下两个请求拦截器/过滤器:

  • 任何身份验证逻辑启动之前的筛选器。这是将令牌从查询参数复制到标头(web套接字需要)。此筛选器的优先级应该是什么
  • 具有自定义授权逻辑的筛选器。这应该在所有身份验证和keydapore授权逻辑之后执行,但就在API执行之前?这个过滤器的优先级应该是什么
  • 我尝试将@Priority(之前是Interceptor.Priority.PLATFORM_)和@prematch也放在我的过滤器中,但即使是在OIDC启动后也会调用它

    另外,是否有任何方法支持扩展quarkus oidc逻辑以包括自定义代码


    我无法获得oidc和KeyClope auth拦截器的优先级(知道这些可以帮助我决定过滤器的优先级)。请帮助。

    从quarkus谷歌小组获得了答案

    对于#2,具有任何优先级(不应为@prematch)的ContainerRequestFilter将达到此目的。
    另一种选择是定制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);
        }
    
    }
    
    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(); 
        }
    }