2017-11-08 51 views
1

のため、Admin loginpageを開くことができませんでしたので、nginxベースのリバースプロキシであるkong(0.10.3)の後ろで動作するkeycloak 3.2.1の問題があります。リバースプロキシの背後にあるKeycloakを使用しています:混在したコンテンツ

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

管理コンソールなどへのリンク、私はhttps://{gateway}/auth経由で私のゲートウェイルートを経由してkeycloak呼び出し、それがkeycloakロゴエントリポイントを私に示して - これまでのところは良いです。

しかし、管理コンソール - >https://{gateway}/auth/admin/master/console/を呼び出すと、keycloakは混在したコンテンツのために私のブラウザがブロックするhttp(下記のscreenieを参照)を介してcss/jsを読み込もうとします。 、私は内容の成功と私のdockerfileにcliを(ファイルは変更されませんでしたをその統合しようとした、そこにからhttps://github.com/dukecon/keycloak_postgres_https

は、私の周りを検索し、このスレッドが見つかりました:keycloak apache server configuration with 'Mixed Content' problemsこのgithubのレポにつながります私のレポにそれらをコピーして、ドッカーファイルから追加/実行するだけです)。これが今の私の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

をだから私は今のアイデアを午前とあなたは私を助けることを願っ:

  • Keycloakにhttps経由でその '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 

それは香港という、あまりにも興味深いかもしれませんhttpからhttpsへのリダイレクト( "insecureEdgeTerminationPolicy": "Redirect")を使用して、ルートを使ってオープンシフトで展開されます。

答えて

3

これは何とかリクエストヘッダnginxのX-Forwarded-ForX-Forwarded-Proto設定しKeycloak Docker behind loadbalancer with https fails

の複製のように聞こえます。次に、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は、彼らがHTTPSたようnginxのからの着信のhttpリクエストを処理しなければならないことを告げなければなりません。

+0

私はkong/nginxをチェックし、私が確信しているときに回答を受け入れます(私のワークベンチatmではなく、時間がかかるでしょう)。今までありがとう! – Dominik

+0

同じ状況に陥っている人にとっては、私はこのヒントをここにも載せておきます:ブーマーが説明したもの(実際には、kongがデフォルトごとに正しいヘッダーを送信します)とは別に、8080経由で呼び出されたオープンシフトサービスkcの8080の標準ポートバインディングはhttpであるため、kcはhttpを提供します。私たちは、8443、et voilaを使うように、オープンシフト設定を変更しました。働いた。 :) – Dominik

2

すべての上流ロードバランサにX-Forwarded-ForX-Forwarded-Protoというヘッダーを追加して、それらがKeycloakサーバーに届くことを確認します。 X-Forwarded-Forは、LBにルーティングするKeycloakのドメインで、X-Forwarded-Protoはプロトコル(ほとんどの場合https)にする必要があります。あなたがstandalone.xmlまたはstandalone-ha.xmlファイルを変更し、<server><http-listener>要素にproxy-address-forwarding="true"属性を追加する必要があり、最終的なステップとして

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

+0

これに関するアイデアhttps://stackoverflow.com/questions/48513451/keycloak-with-nginx-proxy-server-not-authenticating-rest-api?noredirect=1#comment84046838_48513451? – ksernow

関連する問題