2017-11-08 15 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 (아래 스크린 참조)를 통해 css/js를로드하려고 시도합니다. 나는 내용 '성공을 내 dockerfile로 (CLI 파일을 변경하지 않은'를 자사의 통합 시도, 거기부터 https://github.com/dukecon/keycloak_postgres_https

:

나는 주위 검색이 스레드 발견 keycloak apache server configuration with 'Mixed Content' problems이 GitHub의에 환매 특약으로 이어질 그냥 내 repo에 복사하고 추가/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

그래서 지금은 아이디어에서 나는 당신이 나를 도울 수있는 희망 :

  • Keycloak에게 https를 통해 'css 파일'을 호출하도록하려면 어떻게해야합니까?

  • 내가 cli 스크립트에서 뭔가를 변경해야합니까? 여기

스크립트의 내용이다 :

config.sh :

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 

그것은 홍콩, 너무 관심이 있습니다

#!/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 http에서 https 로의 리디렉션 ("insecureEdgeTerminationPolicy": "Redirect")을 사용하여 opensshift에 배포됩니다.

답변

3

이 어떻게 든 요청 헤더 의 nginxX-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에 요청을 전달하는 것입니다. 그들이 HTTPS했다처럼 따라서 Keycloak/제이보스의 nginx에서 들어오는 HTTP 요청을 처리해야한다는되어야합니다.

+0

나는 kong/nginx를 확인하고 확신 할 때 답변을 받아 들일 것입니다. (내 workbench atm이 아니기 때문에 시간이 필요합니다). 지금까지 감사드립니다! – Dominik

+0

동일한 상황에 처한 사람들에게는 Boomer가 설명한 것 외에도 (실제로 kong이 기본값 당 적절한 헤더를 전송함) 별개로 8080을 통해 호출 된 오픈 시프트 서비스에 문제가 있습니다. kc의 8080에 대한 표준 포트 바인딩은 http이므로 kc는 http를 제공합니다. 우리는 오픈 시프트 설정을 8443을 사용하도록 변경했습니다. 일했다. :) – Dominik

2

모든 업스트림로드 밸런서에 X-Forwarded-ForX-Forwarded-Proto 헤더를 추가하고 (Boomer가 말한 것처럼) 이들이 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