Ошибка входа в Keycloak Destination_invalid
В настоящее время я пытаюсь настроить keycloak для обеспечения единого входа в экземпляр nextcloud и gitlab. Все три службы работают внутри сети Docker Compose с сервером nginx в качестве прокси для каждого из них. Я могу перейти к keycloak, nextcloud и gitlab и нормально войти в систему с соответствующими учетными записями администратора. Вход только через keycloak в nextcloud или gitlab невозможен.
При попытке войти в nextcloud через keycloak отправляется следующий запрос saml:
<samlp:AuthnRequest
xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol"
xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion"
ID="ONELOGIN_472a6a24a82cd8195e67727722780d428f21494f"
Version="2.0"
IssueInstant="2021-02-08T17:49:07Z"
Destination="https://mydomain.de/auth/realms/master/protocol/saml"
ProtocolBinding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST"
AssertionConsumerServiceURL="https://www.mydomain.de/nextcloud/apps/user_saml/saml/acs">
<saml:Issuer>https://www.mydomain.de/nextcloud/apps/user_saml/saml/metadata</saml:Issuer>
<samlp:NameIDPolicy
Format="urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified"
AllowCreate="true" />
</samlp:AuthnRequest>
Ошибка, зарегистрированная keycloak:
(default task-3) org.keycloak.events.jpa.EventEntity{clientId=null, realmId=master, ipAddress=172.19.0.1, id=c640029f-d9d5-4141-a473-b3ef981b1347, sessionId=null, time=1612806547526, error=invalid_authn_request, type=LOGIN_ERROR, userId=null, detailsJson={"reason":"invalid_destination"}}
Что мне кажется странным, так это значение ipAddress, указанное в ошибке 172.19.0.1, которое является IP-адресом сети создания докера.
При попытке войти в gitlab через keycloak отправляется следующий saml-запрос:
<samlp:AuthnRequest AssertionConsumerServiceURL='https://mydomain.de/gitlab/users/auth/saml/callback'
Destination='https://mydomain.de/auth/realms/master/protocol/saml'
ID='_51172953-2b87-4c35-bde1-098aff31e7a9' IssueInstant='2021-02-08T16:48:03Z' Version='2.0'
xmlns:saml='urn:oasis:names:tc:SAML:2.0:assertion'
xmlns:samlp='urn:oasis:names:tc:SAML:2.0:protocol'>
<saml:Issuer>https://mydomain.de/gitlab</saml:Issuer>
<samlp:NameIDPolicy AllowCreate='true' Format='urn:oasis:names:tc:SAML:2.0:nameid-format:persistent'/>
</samlp:AuthnRequest>
По крайней мере, keycloak выдает ту же ошибку, что и при попытке войти в nextcloud.
Докер-контейнер для keycloak настроен как
FROM jboss/keycloak:latest
ENV PROXY_ADDRESS_FORWARDING=true
ENV KEYCLOAK_USER=*****
ENV KEYCLOAK_PASSWORD=*****
ENV KEYCLOAK_FRONTEND_URL=https://www.mydomain.de/auth
ENV DB_VENDOR=postgres
ENV DB_DATABASE=******
ENV DB_USER=*****
ENV DB_PASSWORD=*****
ENV DB_ADDR=*****
ENV KEYCLOAK_LOGLEVEL=TRACE
ENV ROOT_LOGLEVEL=TRACE
Соответствующая служба в файле компоновки докера определяется как
keycloak:
build:
context: ../container/keycloak
depends_on:
- postgres
volumes:
- "keycloak:/tmp"
Кроме того, конфигурация обратного прокси-сервера в nginx для конечной точки keycloak:
location /auth {
proxy_pass http://keycloak:8080;
proxy_redirect default;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-Port $server_port;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_http_version 1.1;
}
Итак, видимо, мне чего-то не хватает. Единственный намек, который я нашел на данный момент, заключается в том, что valid_destination указывает на то, что значение назначения в запросе Saml неверно. Однако, по крайней мере, URL правильный. Я предполагаю, что keycloak ожидает свой IP-адрес от сети создания докера вместо mydomain.de . Однако я подумал, что
ENV PROXY_ADDRESS_FORWARDING=true
Решил бы этот вопрос. Я рад любой помощи, которую могу получить. Если потребуется дополнительная информация, я предоставлю им как можно скорее.