【问题标题】:Quarkus Custom authorization interceptorsQuarkus 自定义授权拦截器
【发布时间】:2020-10-11 05:00:01
【问题描述】:

我有一个 Quarkus 微服务,使用 quarkus-oidc 和 quarkus-keycloak-authorization 扩展通过 Keycloak 进行身份验证和授权。

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

  1. 在任何身份验证逻辑启动之前的过滤器。这是将令牌从查询参数复制到标头(Web 套接字需要)。这个过滤器的优先级应该是什么?
  2. 具有自定义授权逻辑的过滤器。这应该在所有身份验证和密钥斗篷授权逻辑之后但在 API 执行之前执行吗?这个过滤器的优先级应该是什么?

我尝试将 @Priority(Interceptor.Priority.PLATFORM_BEFORE) 和 @Prematching 也放入我的过滤器,但即使在 OIDC 启动后也会调用它。

另外,有没有办法支持扩展 quarkus oidc 逻辑以包含自定义代码?

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

【问题讨论】:

    标签: authorization openid-connect interceptor quarkus requestfiltering


    【解决方案1】:

    从 quarkus google 小组得到答案。

    对于 #2,具有任何优先级(不应为 @Prematching)的 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);
        }
    
    }
    

    对于#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(); 
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多