Ошибка входа в 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

Решил бы этот вопрос. Я рад любой помощи, которую могу получить. Если потребуется дополнительная информация, я предоставлю им как можно скорее.

0 ответов

Другие вопросы по тегам