我正在做一个实验:我正在尝试使用Keycloak在ActiveMQ Artemis中进行授权。最后我想要这样的东西:当用户输入类似 :8161 的内容时,他会进入 Keycloak 授权页面,如果根据 Keycloak 设置允许他的用户访问,他就会进入 Artemis 网页。
现在我正在尝试在本地计算机上执行此操作。我已完成所有设置,但在 Artemis 容器日志中出现错误:
2024-11-07 14:30:53,852 WARN [io.hawt.system.JaasAuthenticator] Login failed due to: No LoginModule found for org.keycloak.adapters.jaas.DirectAccessGrantsLoginModule
我可以用它做什么?
我的 docker-compose 文件:
version: '3'
services:
keycloak:
image: quay.io/keycloak/keycloak:24.0.0
container_name: keycloak
restart: unless-stopped
environment:
- KC_BOOTSTRAP_ADMIN_USERNAME=admin
- KC_BOOTSTRAP_ADMIN_PASSWORD=admin
- KC_HOSTNAME_ADMIN=http://localhost:8080
- KC_HOSTNAME=http://localhost:8080
- KC_METRICS_ENABLED=true
- KC_HEALTH_ENABLED=true
- KC_DB=postgres
- KC_DB_PASSWORD=password
- KC_DB_SCHEMA=public
- KC_DB_USERNAME=keycloak
- KC_DB_URL_HOST=postgres
- KC_DB_URL_DATABASE=keycloak
- KC_LOG_LEVEL=ALL
depends_on:
- postgres
ports:
- "8080:8080"
command: start-dev
volumes:
- ./keycloak_data/auth/import:/opt/keycloak/data/import
postgres:
image: postgres:15.0
container_name: postgres-keycloak
restart: unless-stopped
environment:
POSTGRES_DB: keycloak
POSTGRES_USER: keycloak
POSTGRES_PASSWORD: password
ports:
- "5436:5432"
volumes:
- ./postgres_data:/var/lib/postgresql/data
artemis:
image: apache/activemq-artemis:2.37.0
container_name: artemis
restart: unless-stopped
environment:
- KEYCLOAK_ENABLED=true
- ARTEMIS_USER=admin
- ARTEMIS_PASSWORD=admin
ports:
- "8161:8161"
- "61616:61616"
volumes:
- ./artemis_data:/var/lib/artemis/etc
在我创建的 ActiveMQ Artemis 容器中
keycloak.json
:
{
"realm": "artemis",
"resource": "artemis-web",
"auth-server-url": "http://localhost:8080/",
"use-resource-role-mappings": true,
"principal-attribute": "preferred_username",
"ssl-required": "external",
"credentials": {
"secret": "DD91ch9wpGbs2gRkMjsp3sdabt52mQlc"
}
}
login.config
:
activemq {
org.keycloak.adapters.jaas.DirectAccessGrantsLoginModule required
keycloak-config-file="/var/lib/artemis-instance/etc/keycloak.json"
role-principal-class=org.apache.activemq.artemis.spi.core.security.jaas.RolePrincipal;
org.apache.activemq.artemis.spi.core.security.jaas.PrincipalConversionLoginModule required
principalClassList=org.keycloak.KeycloakPrincipal;
};
我不知道这里出了什么问题。
附注我看到一个细节。当我在容器日志中使用 ActiveMQ Artemis 启动容器时,我可以看到以下内容:
2024-11-07 14:30:52,454 INFO [io.hawt.web.auth.keycloak.KeycloakServlet] Keycloak integration is disabled
也许我可以启用集成,我所有的问题都会得到解决?但我不知道如何启用它。
您尝试使用的登录模块(即
org.keycloak.adapters.jaas.DirectAccessGrantsLoginModule
)未随 ActiveMQ Artemis 一起提供,这意味着您需要将其添加到代理的类路径您自己(例如,将其添加到代理的 lib
目录)。