Wildfly 11迁移至26.01:Keycloak登录模块CLI配置求助
适配Wildfly 26 Elytron的Keycloak安全域配置
问题根源
Wildfly 26中旧版security子系统已被弃用,必须使用Elytron子系统。你之前的命令存在两个核心问题:一是沿用了旧版Keycloak LoginModule类名,二是Elytron的CLI配置结构与旧系统不同。
1. 安装Keycloak Elytron适配器
Wildfly 26需要使用Keycloak Elytron专属适配器,而非旧版JBoss适配器,先安装对应模块:
JBOSS_CLI="/opt/wildfly/bin/jboss-cli.sh --connect" # 替换XXX为与Wildfly26兼容的Keycloak版本(建议19+) $JBOSS_CLI --command="module add --name=org.keycloak.keycloak-elytron-adapter --resources=keycloak-elytron-adapter-XXX.jar --dependencies=javax.api,javax.security.auth.message.api,javax.servlet.api,org.jboss.elytron,org.jboss.logging,org.keycloak.keycloak-common,org.keycloak.keycloak-core,org.keycloak.keycloak-adapter-core"
2. 创建Elytron安全域
替换旧版security子系统的安全域,创建Elytron安全域并配置Classic认证:
# 创建基础安全域 $JBOSS_CLI --command="/subsystem=elytron/security-domain=myAPP:add(default-realm=ApplicationRealm, permission-mapper=default-permission-mapper)" # 配置Classic认证,使用Elytron版本的Keycloak LoginModule $JBOSS_CLI --command="/subsystem=elytron/security-domain=myAPP/authentication=classic:add(login-modules=[{\"code\" => \"org.keycloak.adapters.elytron.KeycloakLoginModule\",\"flag\" => \"required\"}])"
重点:此处LoginModule类名是
org.keycloak.adapters.elytron.KeycloakLoginModule,而非旧版的org.keycloak.adapters.jboss.KeycloakLoginModule,这是你之前命令失败的核心原因。
3. 绑定到Undertow子系统
Elytron中Web应用的认证需通过HTTP认证工厂绑定到Undertow:
# 创建HTTP认证工厂 $JBOSS_CLI --command="/subsystem=elytron/http-authentication-factory=myAPP-http-auth:add(security-domain=myAPP, http-server-mechanism-factory=global, mechanism-configurations=[{mechanism-name=KEYCLOAK, mechanism-realm-configurations=[{realm-name=ApplicationRealm}]}])" # 将认证工厂绑定到Undertow应用安全域 $JBOSS_CLI --command="/subsystem=undertow/application-security-domain=myAPP:add(http-authentication-factory=myAPP-http-auth)"
4. 验证配置
执行以下命令检查配置是否生效:
$JBOSS_CLI --command="/subsystem=elytron/security-domain=myAPP:read-resource" $JBOSS_CLI --command="/subsystem=undertow/application-security-domain=myAPP:read-resource"
额外配置(可选)
若你的应用需要自定义Keycloak参数(如Realm、Client ID等),可在LoginModule中添加module-options:
$JBOSS_CLI --command="/subsystem=elytron/security-domain=myAPP/authentication=classic:add(login-modules=[{\"code\" => \"org.keycloak.adapters.elytron.KeycloakLoginModule\",\"flag\" => \"required\", \"module-options\" => {\"realm\" => \"your-realm\", \"auth-server-url\" => \"https://your-keycloak/auth\", \"resource\" => \"your-client-id\", \"credential\" => \"your-client-secret\"}}])"
内容的提问来源于stack exchange,提问作者Cstewa20
相关产品推荐
相关产品推荐

