Keycloak Redirect URI добавляет нулевой порт в URL - PullRequest
0 голосов
/ 01 июля 2018

Обнаружена ошибка redirect_uri в keycloak. Обнаружена та же проблема, зарегистрированная в JIRA KEYCLOAK-7237 , просто хотите проверить, как это обойти? Кто-нибудь может помочь? Заранее спасибо.

2018-06-30 11: 34: 13,996 WARN [org.keycloak.events] (задание по умолчанию-8) type = LOGIN_ERROR, realmId = Victz, clientId = portal, userId = null, ipAddress =, error = invalid_redirect_uri, redirect_uri = https://www.example.com:0/home

Я использую обратный прокси-сервер apache http, работающий на centos7, 10, keycloak 3.4.3. также попытался в ниже окружающей среды, но та же ошибка.

Попробовал в дико 10, дико 11, jboss 7.1, Keycloak 3.4.3, а также keycloak 4.0

Также попытался отключить Apache http и получить доступ непосредственно к http://www.example.org:8080/home, но, похоже, return_uri автоматически преобразован в https с портом 0.

Пожалуйста, смотрите ниже standalone.xml, попытался удалить ниже конфигурации proxy-peer и request-dumper, но не повезло.

    <subsystem xmlns="urn:jboss:domain:undertow:4.0">
        <buffer-cache name="default"/>
        <server name="default-server">
            <http-listener name="default" socket-binding="http" proxy-address-forwarding="true" enable-http2="true"/>
            <https-listener name="https" socket-binding="https" proxy-address-forwarding="true" security-realm="ApplicationRealm" enable-http2="true"/>
            <host name="default-host" alias="localhost">
                <location name="/" handler="welcome-content"/>
                <location name="/drive" handler="drive"/>
                <access-log pattern="%h %l %u %t &quot;%r&quot; %s %b &quot;%{i,Referer}&quot; &quot;%{i,User-Agent}&quot; &quot;%{i,COOKIE}&quot; &quot;%{o,SET-COOKIE}&quot; %S &quot;%I %T&quot;" prefix="access."/>
                <filter-ref name="server-header"/>
                <filter-ref name="x-powered-by-header"/>
                <http-invoker security-realm="ApplicationRealm"/>
            </host>
            <host name="example1" alias="example.com1,www.example.com1" default-web-module=“example1-0.1.war">
                <location name="/drive" handler="drive”/>
                <filter-ref name="proxy-peer"/>
                <filter-ref name="request-dumper" priority="30"/>
            </host>
            <host name="example2" alias="example.com2,www.example.com2" default-web-module="example2-0.1.war">
                <location name="/drive" handler="drive"/>
                <filter-ref name="proxy-peer"/>
                <filter-ref name="request-dumper" priority="30"/>
            </host>
            <host name="example3" alias="example.com3,www.example.com3" default-web-module="example3-0.1.war">
                <location name="/drive" handler="drive"/>
                <filter-ref name="proxy-peer"/>
                <filter-ref name="request-dumper" priority="30"/>
            </host>

        </server>
        <servlet-container name="default">
            <jsp-config/>
            <websockets/>
        </servlet-container>
        <handlers>
            <file name="welcome-content" path="${jboss.home.dir}/welcome-content"/>
            <file name="drive" path="/app/drive"/>
        </handlers>
        <filters>
            <response-header name="server-header" header-name="Server" header-value="JBoss-EAP/7"/>
            <response-header name="x-powered-by-header" header-name="X-Powered-By" header-value="Undertow/1"/>
            <filter name="proxy-peer" class-name="io.undertow.server.handlers.ProxyPeerAddressHandler" module="io.undertow.core"/>
            <filter name="request-dumper" class-name="io.undertow.server.handlers.RequestDumpingHandler" module="io.undertow.core"/>
        </filters>
    </subsystem>

1 Ответ

0 голосов
/ 05 октября 2018

У меня была точно такая же проблема. Мое весеннее загрузочное приложение находится за nginx. Я обновил nginx для прохождения через заголовки x-forwarded и обновил конфигурацию весенней загрузки с помощью

Конфигурация yaml для весенней загрузки:

server:
  use-forward-headers: true    

keycloak:
  realm: myrealm
  public-client: true
  resource: myclient
  auth-server-url: https://sso.example.com:443/auth
  ssl-required: external
  confidential-port: 443

Конфигурация nginx:

upstream app {
   server 1.2.3.4:8042 max_fails=1 fail_timeout=60s;
   server 1.2.3.5:8042 max_fails=1 fail_timeout=60s;
}

server {
    listen 443;
    server_name www.example.com;

    ...

    location / {
        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-Proto $scheme;
        proxy_set_header        X-Forwarded-Host $host;
        proxy_set_header        X-Forwarded-Port   443;

        proxy_next_upstream     error timeout invalid_header http_500;
        proxy_connect_timeout   2;

        proxy_pass          http://app;
    }
}

Конкретное изменение, которое заставило меня работать, добавило keycloak.confidential-port. Как только я добавил, что он больше не добавляет порт 0 в redirect_uri.

Надеюсь, это поможет.

...