可信身份验证请求

问题描述 投票:0回答:1

使用 Quarkus 3 和 Primefaces 扩展来构建 JSF 应用程序。 Quarkus 已设置为使用基于表单的身份验证,并且根据对源代码的审查,FormAuthenticationMechanism 返回 UsernamePasswordAuthenticationRequest 和 TrustedAuthenticationRequest 的凭证类型,这两个都是我实现的。

不确定 TrustedAuthenticationRequest 应该如何工作。请求 Faces 页面时,TrustedAuthenticationRequest 的身份提供程序会被多次调用,似乎每个资源(css、js 等)调用一次。下面列出了身份提供商代码。每次调用时都会设置主体和角色,这似乎有点过分(一页导致超过 10 次调用)。

这是预期的行为还是我在这里实施了错误?

谢谢

@Override
    public Uni<SecurityIdentity> authenticate(TrustedAuthenticationRequest request,
            AuthenticationRequestContext authenticationRequestContext) {
        
        if (Objects.nonNull(request.getPrincipal())) {
            return Uni.createFrom().item(QuarkusSecurityIdentity.builder()
                    .setPrincipal(new QuarkusPrincipal(request.getPrincipal()))
                    .addRoles(Set.of("create", "read", "update", "delete"))
                    .build());
        }

        throw new AuthenticationFailedException("password invalid or user not found");
    }
quarkus forms-authentication
1个回答
0
投票

我想我找到了答案:

quarkus.http.auth.proactive=false

https://quarkus.io/guides/security-proactive-authentication

这回答了我关于多重身份验证的问题。我仍然不确定为什么表单有两种身份验证类型。我能想到的最接近的原因是它模仿了 Jakartaee 中 Soteria 安全性的 IdentityStore。通常有一个用于用户凭据的身份存储,以及一个用于角色的单独身份存储。那么也许这就是 Quarkus 正在做的事情?

© www.soinside.com 2019 - 2024. All rights reserved.