gpt4 book ai didi

authorization - Quarkus 自定义授权拦截器

转载 作者:行者123 更新时间:2023-12-04 04:06:06 30 4
gpt4 key购买 nike

我有一个 Quarkus 微服务使用 quarkus-oidc 和 quarkus-keycloak-authorization 扩展对 Keycloak 进行身份验证和授权。
我需要另外实现以下两个请求拦截器/过滤器:

  • 在任何身份验证逻辑开始之前的过滤器。这是将 token 从查询参数复制到 header (Web 套接字需要)。这个过滤器的优先级应该是什么?
  • 具有自定义授权逻辑的过滤器。这应该在所有身份验证和 keycloak 授权逻辑之后执行,但在 API 执行之前执行?这个过滤器的优先级应该是什么?

  • 我尝试将 @Priority(Interceptor.Priority.PLATFORM_BEFORE) 和 @Prematching 也放到我的过滤器中,但即使是在 OIDC 启动后也会调用它。
    另外,有没有办法支持扩展 quarkus oidc 逻辑以包含自定义代码?
    我无法获得 oidc 和 keycloak-auth 拦截器的优先级(知道这些可以帮助我决定过滤器的优先级)。请帮忙。

    最佳答案

    从 quarkus 谷歌小组得到了答案。
    对于#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
    sample 过滤器:
    只需注意优先级。优先级越高,它首先会被调用。
    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();
    }
    }

    关于authorization - Quarkus 自定义授权拦截器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62495685/

    30 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com