无法在KeyCloak身份验证SPI中访问AuthenticationManager



我正在为KeyCloak编写自定义身份验证SPI。要身份验证cookie,我想使用KeyCloak-Services的AuthenticationManager。我已经在项目中添加了KeyCloak-Services作为Maven依赖性。它没有给出任何汇编错误,但是在KeyCloak上部署SPI之后,它使我低于异常。

这是例外:

错误[org.keycloak.services.error.keycloakerrorhandler](默认 任务-68(未接收的服务器错误:java.lang.noclassdeffounderror: org/keycloak/services/经理/AuthenticationManager 在org.keycloak.examples.authenticator.secretquestionauthenticator.authenticate(secretquestionauthenticator.java:102( 请访问org.keycloak.authentication.defaultauthentication.flow.processflow(defaultauthenticationflow.java:200( 在org.keycloak.authentication.authentication Processor.authenticateonly(Authentication Processor.java:853( 在org.keycloak.authentication.authentication Processor.authenticate(Authentication Processor.java:722( 请访问org.keycloak.protocol.authorizationendpointbase.handlebrowserauthenticationRequest(授权endpointpointbase.java:145( at org.keycloak.protocol.oidc.endpoints.authorizationendpoint.buildauthorization codeAuthorizationResponse(oferizationendentpoint.java:395( at org.keycloak.protocol.oidc.endpoints.authorizationendpoint.build(operizationendpoint.java:139(

maven依赖关系

<dependencies>
<dependency>
    <groupId>org.keycloak</groupId>
    <artifactId>keycloak-core</artifactId>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>org.keycloak</groupId>
    <artifactId>keycloak-server-spi</artifactId>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>org.keycloak</groupId>
    <artifactId>keycloak-server-spi-private</artifactId>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>org.jboss.logging</groupId>
    <artifactId>jboss-logging</artifactId>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>org.keycloak</groupId>
    <artifactId>keycloak-services</artifactId>
    <scope>provided</scope>
</dependency>
</dependencies>

事实证明,我部署代码的方式正在引起问题。我正在使用

在KeyCloak上部署代码
mvn clean install wildfly:deploy

当我们使用上述命令部署代码时,它无法在KeyCloak上下文中加载JAR文件。为了使其起作用,我们必须使用KeyCloak SPI中提到的模块结构部署代码。当我们使用模块方法部署代码时,我们可以在新创建的模块的模块文件中添加依赖项。然后可以在代码中使用。

我在KeyCloak中也面临类似问题15.0.2。通过遵循此链接解决:

https://keycloak.discourse.group/t/how-to-get-get-authenticated-user-iser-inside-realmresourceprovider/13260/2

如果链接无法访问,这是解决方案:

您必须在罐子中添加jboss-deployment structure.xml使用所需的模块。

<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure>
    <deployment>
        <dependencies>
            <module name="org.keycloak.keycloak-core" export="true"/>
            <module name="org.keycloak.keycloak-server-spi" export="true"/>
            <module name="org.keycloak.keycloak-server-spi-private" export="true"/>
            <module name="org.keycloak.keycloak-services" export="true"/>
        </dependencies>
    </deployment>
</jboss-deployment-structure>

相关内容

  • 没有找到相关文章

最新更新