web-dev-qa-db-ja.com

Keycloak管理コンソールにアクセスできません

ルートサーバーでKeycloakをセットアップしようとしていますが、インターネットから管理コンソールにアクセスできません。キークロークサーバーをインストールし、同じマシンのnginxリバースプロキシの背後に配置しました。ドメインのletsencrypt証明書を設定しました。スクリプトを介してキークロークの管理ユーザーもセットアップしました。

ドメインhttps://<my-domain>のサーバーにアクセスすると、https://<my-domain>/authに転送され、「管理コンソール」へのリンクがあるキークロークのウェルカムページが表示されます。このリンクはhttps://<my-domain>/adminを指していますが、404を示しています。

最初はこれがnginxの問題かもしれないと思ったので、ドキュメントのガイドに従ってロードバランサーをセットアップしました( https://www.keycloak.org/docs/latest/server_installation/index.html# _setting-up-a-load-balancer-or-proxy )。そこで、「構成の検証」の下で、パスhttps://<my-domain>/auth/realms/master/.well-known/openid-configurationを開くように指示されます。これは期待どおりに機能し、いくつかのリンクとその他の情報が含まれたjsonファイルを取得します。ただし、これらのリンクはどれも機能しません。すべて404になります。

https://<my-domain>/auth/realms/masterを試すと、JSON応答が返されます。いくつかのリンクは機能するので、nginxの問題ではなく、キークローク自体の問題だと思います。

基本的な質問は次のとおりです。インターネット経由で管理コンソールにアクセスできるようにKeycloakを構成するにはどうすればよいですか?デフォルトではlocalhostでしかアクセスできないと読みましたが、このデフォルトを上書きする方法が必要ですか?

関連するnginx設定:

upstream keycloak {
    server 127.0.0.1:8080;
}

server {
    listen 443 ssl http2;
    # some ssl configuration for letsencrypt

    location / {
        proxy_pass          http://keycloak;
        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;
    }
}

編集したkeycloak/standalone/configuration/standalone.xmlの一部:

<subsystem xmlns="urn:jboss:domain:undertow:10.0" ...>
    ...
    <server name="default-server">
        <http-listener name="default" 
            socket-binding="http" 
            redirect-socket="proxy-https"
            enable-http2="true"
            proxy-address-forwarding="true" />
        ...
    </server>
    ...
</subsystem>
...
<interfaces>
    <interface name="management">
        <any-address />
    </interface>
    <interface name="public">
        <any-address />
    </interface>
</interfaces>
<socket-binding-group name="standard-sockets" ...>
    ...
    <socket-binding name="proxy-https" port="443" />
    ...
</socket-binding-group>

編集

直せました。問題は、キークロークが最初のページをhttps://<my-domain>/からhttps://<my-domain>/authにリダイレクトしていたが、他のすべてのリンクでこの追加の/authが欠落していたことでした。そのため、管理リンクはhttps://<my-domain>/admin/master/console部分なしで/authを指しており、このページは存在しませんでした。 /authを含むURLを手動で入力すると、「loading ..」メッセージが含まれるページが表示されましたが、すべてのスタイルおよびJavaScriptファイルがリンクされており、URLに/authの部分がないため、何もありませんでしたワーキング。

これを修正するために、standalone.xmlの行<web-context>auth</web-context><web-context>/</web-context>に変更し、すべてが期待どおりに動作するようになりました。スタートページでのリダイレクトはなくなり、すべてのリンクは/auth部分なしで機能します。ただし、そもそもそれが機能しなかった理由と、/authリダイレクトが意図されていた場合にこれをどのように解決するかは興味深いでしょう。

6
Manuel Mauky

Kubernetesクラスターのnginxリバースプロキシの背後にあるキークロークインスタンスでも同じ問題が発生しました。 env PROXY_ADDRESS_FORWARDINGをtrueに設定して修正しました。 PROXY_ADDRESS_FORWARDING=true

0

ブラウザで/ auth/admin/master/console /を開いてみてください。

追加情報:

https://www.keycloak.org/docs/latest/getting_started/index.html

https://www.keycloak.org/docs-api/8.0/rest-api/index.html

ああ、私はドッキングされたキークロークを使うことを勧めます。はるかに簡単な場合は、新しいバージョンへのアップグレードパス。

0
Julian Egner