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
.
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 문제를 해결하는 데 도움이됩니다.
web-context
설정
Keycloak 컨텍스트 경로를 수정 한 후이 문제가 발생하면 리디렉션 URL 설정을 추가로 변경해야합니다.
<web-context>yourchange/auth</web-context>
다시
변경<web-context>auth</web-context>
/auth/admin
)로 이동합니다./auth/admin/master/console/*
으로
변경하십시오./yourchange/auth/admin/master/console/*
<web-context>yourchange/auth</web-context>
standalone.xml Restart Keycloak에 원래 변경 사항
을 입력하고 로그인 페이지 (현재
/yourchange/auth/admin
)로 이동합니다.redirect_uris
DB에서 테이블 을 편집 하고 값 필드를 조정할 수 있습니다
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 공간에 제공했는데 제대로 작동했습니다!
나도 같은 문제에 직면했습니다. 전체 URL 뒤에 리디렉션 URL 추가 * 영역 아래에있는 특정 클라이언트로 이동하여 수정했습니다.
문제가 해결 될 것입니다
예 : 리디렉션 URI : http : localhost : 3000 / myapp / generator / *
인증 코드 흐름을 사용하는 경우 response_type
쿼리 매개 변수는와 같아야합니다 code
. 참조 https://www.keycloak.org/docs/3.3/server_admin/topics/sso-protocols/oidc.html를
로그 아웃 후 (예전처럼) keycloak 로그인 페이지로 리디렉션하려는 경우 기본적으로 허용되지 않지만 클라이언트 관리 콘솔의 "Valid Redirect URIs"설정에서도 구성해야합니다.
redirect_uri 매개 변수의 값이 사용중인 클라이언트에 대해 화이트리스트에 있는지 확인하십시오. 관리 콘솔을 통해 클라이언트 구성을 관리 할 수 있습니다.
리디렉션 URI는 화이트리스트에있는 리디렉션 URI 중 하나와 정확히 일치해야합니다. 또는 화이트리스트에 추가하려는 URI 끝에 와일드 카드를 사용할 수 있습니다. 보다: https://www.keycloak.org/docs/latest/server_admin/#_clients
와일드 카드를 사용하여 리디렉션 URI를 허용 목록에 추가하는 것은 Keycloak에서 허용되지만 실제로는 OpenId Connect 사양을 위반하는 것입니다. https://lists.jboss.org/pipermail/keycloak-dev/2018-December/011440.html 에서 이에 대한 토론을 참조하십시오.