keycloak에서 사용자를 인증하기 위해 API에서 공격하려고 할 때 keycloak 페이지에서 잘못된 매개 변수 : redirect_uri 오류가 발생합니다. 나는 마스터와는 별개로 나만의 영역을 만들었습니다. keycloak은 http에서 실행됩니다. 제발 도와주세요.
답변
답변
.Net Devloper 인 경우 아래 구성을 확인하십시오. keycloakAuthentication 옵션 클래스 set CallbackPath = RedirectUri, //이 속성을 설정해야합니다. 그렇지 않으면 잘못된 리디렉션 오류가 표시됩니다.
나는 같은 오류에 직면했다. 제 경우에는 유효한 리디렉션 URI 문제가 올바르지 않았습니다. 그래서 이것이 제가 따라 간 단계입니다.
관리자로 keycloack에 처음 로그인합니다. 그런 다음 영역을 선택하십시오 (영역으로 자동 연결될 수도 있음). 그러면 아래 화면이 나타납니다.
왼쪽 패널에서 클라이언트 를 선택합니다 . 그런 다음 앱에 대해 구성한 관련 클라이언트를 선택하십시오. 기본적으로 선택하지 않으면 설정 탭이됩니다. 내 앱이 포트 3000에서 실행 중 이었으므로 올바른 설정은 다음과 같습니다. localhost : 3000에서 실행되는 앱이 있다고 가정하면 설정은 다음과 같아야합니다.
답변
만든 새 영역으로 인해이 오류가 발생하는 경우
리디렉션되는 URL에서 (이 URL에 대한 Chrome 개발 도구를 찾아야 할 수 있음) 영역을에서 master
방금 만든 영역으로 변경하고을 사용하지 않는 경우 https
redirect_uri도를 사용하고 있는지 확인합니다 http
.
공용 도메인 (localhost 아님)에서 Keycloak을 설정하려고하기 때문에이 오류가 발생하는 경우
1 단계) 이 문서 에
따라 MySql 데이터베이스를 설정하십시오. 공식 문서 를 참조해야 할 수도 있습니다 .
2 단계)
명령 실행update REALM set ssl_required = 'NONE' where id = 'master';
참고 :
이 시점에서 기술적으로 로그인 할 수 있어야하지만 Keycloak 4.0 버전은 방금 https 지원을 해제 했음에도 리디렉션 uri에 https를 사용하고 있습니다. Keycloak이이 문제를 해결할 때까지 역방향 프록시로이 문제를 해결할 수 있습니다. 리버스 프록시는 Java 키 저장소에 대해 걱정할 필요없이 SSL / TLS 인증서를 쉽게 생성하기 위해 사용하고자하는 것입니다.
참고 2 : Keycloak은 이후 자체 프록시와 함께 나왔습니다. 아직 시도하지 않았지만이 시점에서 내 지시를 따르지 않고 (keycloak gatekeeper) [ https://www.keycloak.org/downloads.html]을 확인하는 것이 좋습니다 . Keycloak Gatekeeper를 설정하는 데 문제가있는 경우 Apache로 역방향 프록시를 설정하는 방법에 대한 지침을 계속 유지하겠습니다.
3 단계) Apache를 설치합니다. Apache를 리버스 프록시로 사용할 것입니다 (NGINX를 사용해 보았지만 NGINX에는 몇 가지 제한 사항이 있습니다). 참조 냠 아파치 설치 (가상 코어 7), 그리고 아파치 설치 apt-get을 (우분투 16), 또는 특정 배포판에 대한 지침을 찾을 수 있습니다.
4 단계) Apache 실행
-
사용
sudo systemctl start httpd
(가상 코어) 또는sudo systemctl start apache2
(우분투) -
사용
sudo systemctl status httpd
(가상 코어) 또는sudo systemctl status apache2
아파치가 실행중인 경우 (우분투)를 확인합니다. 녹색 텍스트로 단어를active (running)
보거나 마지막 항목이 읽으면Started The Apache HTTP Server.
좋은 것입니다.
5 단계) 역방향 프록시와 SSL 연결을 설정하면 역방향 프록시가 http를 통해 keyCloak과 통신합니다. 이 http 통신이 동일한 시스템에서 발생하기 때문에 여전히 안전합니다. Certbot 을 사용 하여 자동 갱신 인증서를 설정할 수 있습니다 .
이러한 유형의 암호화가 충분하지 않고 보안 정책에 종단 간 암호화가 필요한 경우 역방향 프록시를 사용하는 대신 WildFly를 통해 SSL 을 설정 하는 방법을 찾아야 합니다.
참고 :
실제로 https를 관리 포털에서 제대로 작동하지 못했습니다. 아마도 이것은 내가 사용하는 Keycloak 4.0 베타 버전의 버그 일 수 있습니다. SSL 수준을 외부 요청에만 요구하도록 설정할 수 있다고 가정하지만 이것이 작동하지 않는 것 같았 기 때문에 2 단계에서 https를 없음으로 설정했습니다. 여기서부터 SSH 터널을 통해 http를 계속 사용하여 관리자 설정을 관리합니다.
6 단계)
https를 통해 사이트를 방문하려고 할 때마다 http 요청을 https로 리디렉션하도록 자동 강제하는 HSTS 정책을 트리거합니다. 다음 지침에 따라 Chrome에서 HSTS 규칙 을 지우고 당분간 사이트의 https 버전을 다시 방문하지 마십시오.
7 단계)
Apache를 구성합니다. 먼저 httpd.conf 파일이있는 위치를 찾으 십시오 . httpd.conf 파일에는 별도의 디렉토리에있는 구성 파일이 포함되어있을 수 있습니다. 제 경우 conf.d
에는 httpd.conf 파일이있는 폴더에 인접한 디렉토리 에서 모든 구성 파일을 찾았 습니다.
conf 파일을 찾으면 conf 파일에서 다음 가상 호스트 항목을 변경하거나 추가하십시오. certbot에 의해 생성 된 이미 존재하는 SSL 옵션을 재정의하지 않도록하십시오. 완료되면 구성 파일이 다음과 같이 보일 것입니다.
<VirtualHost *:80>
RewriteEngine on
#change https redirect_uri parameters to http
RewriteCond %{request_uri}\?%{query_string} ^(.*)redirect_uri=https(.*)$
RewriteRule . %1redirect_uri=http%2 [NE,R=302]
#uncomment to force https
#does not currently work
#RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI}
#forward the requests on to keycloak
ProxyPreserveHost On
ProxyPass / http://127.0.0.1:8080/
ProxyPassReverse / http://127.0.0.1:8080/
</VirtualHost>
<IfModule mod_ssl.c>
<VirtualHost *:443>
RewriteEngine on
#Disable HSTS
Header set Strict-Transport-Security "max-age=0; includeSubDomains;" env=HTTPS
#change https redirect_uri parameters to http
RewriteCond %{request_uri}\?%{query_string} ^(.*)redirect_uri=https(.*)$
RewriteRule . %1redirect_uri=http%2 [NE,R=302]
#forward the requests on to keycloak
ProxyPreserveHost On
ProxyPass / http://127.0.0.1:8080/
ProxyPassReverse / http://127.0.0.1:8080/
#Leave the items added by certbot alone
#There should be a ServerName option
#And a bunch of options to configure the location of the SSL cert files
#Along with an option to include an additional config file
</VirtualHost>
</IfModule>
8 단계) Apache를 다시 시작합니다. 사용 sudo systemctl restart httpd
(가상 코어) 또는 sudo systemctl restart apache2
(우분투).
9 단계)
서버에 로그인을 시도하기 전에 Keycloak에 http를 사용하도록 지시 했으므로 안전하게 연결하는 다른 방법을 설정해야합니다. 이는 keycloak 서버에 VPN 서비스를 설치하거나 SOCKS를 사용하여 수행 할 수 있습니다. SOCKS 프록시를 사용했습니다. 이렇게하려면 먼저 동적 포트 전달을 설정해야합니다.
ssh -N -D 9905 user@example.com
또는 Putty 를 통해 설정하십시오 .
이제 포트 9905로 전송 된 모든 트래픽이 SSH 터널을 통해 서버로 안전하게 라우팅됩니다. 서버 방화벽에서 포트 9905를 허용 목록에 추가했는지 확인하십시오.
동적 포트 포워딩 설정이 완료되면 포트 9905에서 SOCKS 프록시를 사용하도록 브라우저를 설정해야합니다 . 지침은 여기 .
10 단계) 이제 Keycloak 관리 포털에 로그인 할 수 있습니다. 웹 사이트에 연결하려면 http://127.0.0.1 로 이동 하면 SOCKS 프록시가 관리 콘솔로 이동합니다. 완료되면 SOCKS 프록시를 끄십시오. 서버의 리소스를 활용하므로 계속 켜져 있으면 인터넷 속도가 느려집니다.
11 단계) 이 모든 것을 파악하는 데 얼마나 걸 렸는지 묻지 마십시오.
답변
keycloak 관리 콘솔> SpringBootKeycloak> Cients> 로그인 앱 페이지로 이동합니다. 유효한 리디렉션 URI 섹션에 http : // localhost : 8080 / sso / login을 추가
하십시오.
간접 URI 문제를 해결하는 데 도움이됩니다.
답변
Keycloak 컨텍스트 경로를 수정 한 후이 문제가 발생하면 리디렉션 URL 설정을 추가로 변경해야합니다.
- standalone.xml에서
<web-context>yourchange/auth</web-context>
다시
변경<web-context>auth</web-context>
- Keycloak을 다시 시작하고 로그인 페이지 (
/auth/admin
)로 이동합니다. - 로그인하고 “마스터”영역을 선택하십시오.
- 사이드 메뉴에서 “클라이언트”를 선택합니다.
- 나타나는 목록에서 “security-admin-console”클라이언트를 선택하십시오.
- “유효한 리디렉션 URI”를에서 다음
/auth/admin/master/console/*
으로
변경하십시오./yourchange/auth/admin/master/console/*
- 저장하고 로그 아웃합니다. 로그 아웃 후 다시 “잘못된 리디렉션 URL”메시지가 표시됩니다.
- 이제
<web-context>yourchange/auth</web-context>
standalone.xml Restart Keycloak에 원래 변경 사항
을 입력하고 로그인 페이지 (현재
/yourchange/auth/admin
)로 이동합니다. - 로그인하고 즐기십시오
답변
Keycloak 관리 콘솔 웹 사이트에 로그인하고 영역과 해당 클라이언트를 선택한 다음 클라이언트의 모든 URI에 프로토콜이 접두사로 지정되어 있는지 확인하십시오 http://
. 예는http://localhost:8082/*
문제를 해결하는 또 다른 방법은 Keycloak 서버 콘솔 출력을보고 요청이 거부되었음을 나타내는 줄을 찾은 다음 redirect_uri
표시된 값을 복사 * Valid Redirect URIs
하여 Keycloak 관리 콘솔 웹 사이트의 클라이언트 필드에 붙여 넣는 것입니다 . 요청 된 URI는 허용 가능한 URI 중 하나입니다.
답변
http://www.baeldung.com/spring-boot-keycloak 에서 사용 가능한 스프링 부트 및 keycloak 예제를 따르는 동안 잘못된 매개 변수 : redirect_uri 문제 문제에 직면했습니다 . . keycloak 서버에서 클라이언트를 추가 할 때 keycloak 서버가 리디렉션을 수행 할 수 있도록 해당 클라이언트에 대한 리디렉션 URI를 제공해야합니다. 동일한 오류가 여러 번 발생했을 때 keycloak 서버 콘솔에서 올바른 URL을 복사하고 유효한 리디렉션 URI 공간에 제공했는데 제대로 작동했습니다!