web-dev-qa-db-ja.com

リバースプロキシの背後でKeycloakを使用:コンテンツが混在しているため、管理者ログインページを開けませんでした

そのため、ngcloxに基づくリバースプロキシであるkong(0.10.3)の背後でkeycloak 3.2.1を動作させるのに問題があります。

シナリオは次のとおりです。

ゲートウェイルートからhttps://{gateway}/auth経由でkeycloakを呼び出すと、keycloakロゴ付きのエントリポイント、管理コンソールへのリンクなどが表示されます。

しかし、管理コンソールをクリックしてhttps://{gateway}/auth/admin/master/console/を呼び出すと、keycloakはhttp(次のscreenieを参照)を介してcss/jsをロードしようとします。

私は周りを検索してこのスレッドを見つけました: 「混合コンテンツ」の問題を伴うApacheサーバー構成 このgithubリポジトリにつながる: https://github.com/dukecon/keycloak_postgres_https

そこから、そのcliをdockerfileに統合しようとしました(ファイルの内容は変更せず、単にリポジトリにコピーして、dockerfileから追加/実行しました)。これが今の私のdockerfileです:

FROM jboss/keycloak-postgres:3.2.1.Final

USER root

ADD config.sh /tmp/
ADD batch.cli /tmp/

RUN bash /tmp/config.sh

#Give correct permissions when used in an OpenShift environment.
RUN chown -R jboss:0 $JBOSS_HOME/standalone && \
    chmod -R g+rw $JBOSS_HOME/standalone

USER jboss
EXPOSE 8080

悲しいことに、私の問題はまだ存在しています: error

だから私は今のところアイデアがありません、あなたが私を助けることができることを願っています:

  • ここでhttps経由でkeycloakにCSSファイルを呼び出すように指示するにはどうすればよいですか?

  • cLIスクリプトで何かを変更する必要がありますか?

スクリプトの内容は次のとおりです。

config.sh:

#!/bin/bash -x

set -e

JBOSS_HOME=/opt/jboss/keycloak
JBOSS_CLI=$JBOSS_HOME/bin/jboss-cli.sh
JBOSS_MODE=${1:-"standalone"}
JBOSS_CONFIG=${2:-"$JBOSS_MODE.xml"}

echo "==> Executing..."
cd /tmp

$JBOSS_CLI --file=`dirname "$0"`/batch.cli

# cf. http://stackoverflow.com/questions/34494022/permissions-error-when-using-cli-in-jboss-wildfly-and-docker
/bin/rm -rf ${JBOSS_HOME}/${JBOSS_MODE}/configuration/${JBOSS_MODE}_xml_history/current

およびbatch.cli:

embed-server --std-out=echo

# http://keycloak.github.io/docs/userguide/keycloak-server/html/server-installation.html
# 3.2.7.2. Enable SSL on a Reverse Proxy
# First add proxy-address-forwarding and redirect-socket to the http-listener element.
# Then add a new socket-binding element to the socket-binding-group element.

batch

/subsystem=undertow/server=default-server/http-listener=default:write-attribute(name=proxy-address-forwarding,value=true)

/subsystem=undertow/server=default-server/http-listener=default:write-attribute(name=redirect-socket,value=proxy-https)

/socket-binding-group=standard-sockets/socket-binding=proxy-https:add(port=443)

run-batch

stop-embedded-server

Kongがhttpからhttpsへのリダイレクト( "insecureEdgeTerminationPolicy": "Redirect")を使用したルートでopenshiftにデプロイされていることも興味深いかもしれません。

13
Dominik

これは、何らかの形で httpsを使用したロードバランサーの背後にあるKeycloak Dockerが失敗する の複製のように聞こえます

リクエストヘッダーを設定するX-Forwarded-ForおよびX-Forwarded-Proto innginx。次に、SSL終端のリバースプロキシ(別名ロードバランサー)と連携するようにKeycloak(Wildfly、Undertow)を構成する必要があります。詳細な説明については、 http://www.keycloak.org/docs/latest/server_installation/index.html#_setting-up-a-load-balancer-or-proxy を参照してください。

ポイントは、nginxがSSLを終了し、要求をKeycloakに純粋なhttp。したがって、Keycloak/Wildflyは、nginxからの着信http要求を通知する必要がありますhttpsのように処理する必要があります。

16
Boomer

すべてのアップストリームロードバランサーにX-Forwarded-ForおよびX-Forwarded-Protoヘッダーを追加し(Boomerが言ったように)、それらがKeycloakサーバーに到達することを確認します。 X-Forwarded-ForはLBにルーティングするKeycloakのドメインであり、X-Forwarded-Protoはプロトコルである必要があります(ほとんどの場合はhttps)。

最後の手順として、standalone.xmlまたはstandalone-ha.xmlファイルを変更し、proxy-address-forwarding="true"属性を<http-listener>の下の<server>要素に追加する必要があります。

Dockerを使用している場合、元のKeycloakコンテナのPROXY_ADDRESS_FORWARDING環境変数を使用して、この属性を設定できます。

11
László Szabó

私はあなたと同じ問題を抱えていますが、今それは修正されました、これは私の方法です。

まず、クリーンな環境でクロークを使用してリバースプロキシをセットアップし、プロキシとクロークが正しく構成されていることを確認します。

次に、テストと推測で、セットアップキークロークがdockerhub whith dockerからプルしたイメージを使用するときに見つけました。 standalone.xmlからサーバー上のバイナリで設定する場合、いくつかの違いがあります。重要な点は次の2点です。

1。docker envにPROXY_ADDRESS_FORWARDING = trueを設定する必要があります

2。Docker環境にjboss.https.port 443を設定する必要があります

Standalone.xmlも正しく構成されている場合、管理ページで機能します。幸運;)

1
HuBaoQi