@OpenIdAuthenticationMechanismDefinition with wildfly:主体是匿名的

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

我正在尝试将 java-ee-kickoff-app (https://github.com/javaeekickoff/java-ee-kickoff-app) 与 openid 一起使用。 我正在使用 keycloak 26.0.5 和 wildfly 29.0.1.Final (integrated-jaspi 是 false)。

我与用户([电子邮件受保护])和客户端创建了我的领域。

然后我设置参数:

@OpenIdAuthenticationMechanismDefinition(
    clientId = "java-ee-kickoff-app"
    , clientSecret = "Bv2c31PFMU1G2jvtGdsM1ojfH0eeoefv"
    , providerURI = "http://localhost:8180/realms/java-ee-kickoff-app"
    , redirectToOriginalResource = true
        )
@ApplicationScoped
public class KickoffFormAuthenticationMechanism {
}

我删除了原来的 KickoffIdentityStore

我还创建了一个组 IdentityStore :

@ApplicationScoped
public class KickoffGroupIdentityStore implements IdentityStore {

    @Inject
    private PersonService personService;

    @Override
    public Set<ValidationType> validationTypes() {
        return EnumSet.of(ValidationType.PROVIDE_GROUPS);
    }
    @Override
    public Set<String> getCallerGroups(CredentialValidationResult validationResult) {
        String name = validationResult.getCallerPrincipal().getName();
        Person person = personService.getByEmail(name);
        return person.getRolesAsStrings();
    }
}

访问 http://localhost:8080/java-ee-kickoff-app/admin/users 会触发 keycloak 登录页面。我输入管理员用户的凭据。

不幸的是我得到:

Caused by: java.io.IOException: ELY01177: Authorization failed.
    at [email protected]//org.wildfly.security.auth.jaspi.impl.JaspiAuthenticationContext$1.handleOne(JaspiAuthenticationContext.java:261)

当我调试应用程序时,我可以看到找到了组。 另外

org.glassfish.soteria.cdi.DefaultIdentityStoreHandler
返回一个带有正确名称和组的良好 CredentialValidationResult。

问题:

securityContext.getCallerPrincipal().getName()
是“匿名”。

那么为什么我会遇到身份验证失败以及为什么我的委托人是“匿名”?

jakarta-ee keycloak wildfly openid jakarta-ee-security-api
1个回答
0
投票

我从我的

web.xml
中删除了这部分:

<login-config>
    <auth-method>OIDC</auth-method>
</login-config>

因此,如果您使用@OpenIdAuthenticationMechanismDefinition

,请不要在您中添加身份验证方法OIDC
web.xml

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