keycloak 유효하지 않은 매개 변수 : redirect_uri


83

keycloak에서 사용자를 인증하기 위해 API에서 공격하려고 할 때 keycloak 페이지에서 잘못된 매개 변수 : redirect_uri 오류가 발생합니다. 나는 마스터와는 별개로 나만의 영역을 만들었습니다. keycloak은 http에서 실행됩니다. 제발 도와주세요.


을 통해 확인하는 동안 표시 소자를 그 500 에러 검사
비제이 딴

2
동일한 질문을 여러 번 게시하지 마십시오 . 원래 질문에 더 많은 세부 정보를 추가하려면 질문 바로 아래에있는 '수정'을 클릭하면됩니다.
THelper


1
리디렉션 URL에서 https 대 http 확인
ThomasRS

1
내 경우에는 그것은 바보 같은 실수였다 "<IP 주소>"대신에 "http : // <IP 주소>"
SwissNavy

답변:


54

나를 위해 일한 것은 wildchar '*' 추가하는 것 입니다. 프로덕션 빌드의 경우이 필드의 가치에 대해 좀 더 구체적으로 설명하겠습니다. 그러나 개발 목적을 위해 이것을 할 수 있습니다.

여기에 이미지 설명 입력

keycloak 관리 콘솔-> Realm_Name-> Cients-> Client_Name 에서 설정 가능 합니다.

편집 : 프로덕션에서이 작업을 수행하지 마십시오. 그렇게하면 큰 보안 결함이 발생합니다.


13
이 답변은 위험한 보안 결함 일 수 있으므로 안전하지 않은 리디렉션 공격의 문을 열 수 있습니다.
Michael Courcy

이 답변이 현재 최고 투표를 받았다는 것을 믿을 수 없습니다. 이것은 해결책과는 거리가 멀고 실제로 주석에만 표시되어야합니다. 반면에, 질문에 답을 시도하기에는 너무 적은 정보가 있습니다.
bsaverino

35

.Net Devloper 인 경우 아래 구성을 확인하십시오. keycloakAuthentication 옵션 클래스 set CallbackPath = RedirectUri, //이 속성을 설정해야합니다. 그렇지 않으면 잘못된 리디렉션 오류가 표시됩니다.

나는 같은 오류에 직면했다. 제 경우에는 유효한 리디렉션 URI 문제가 올바르지 않았습니다. 그래서 이것이 제가 따라 간 단계입니다.

관리자로 keycloack에 처음 로그인합니다. 그런 다음 영역을 선택하십시오 (영역으로 자동 연결될 수도 있음). 그러면 아래 화면이 나타납니다.

여기에 이미지 설명 입력

왼쪽 패널에서 클라이언트 를 선택합니다 . 그런 다음 앱에 대해 구성한 관련 클라이언트를 선택하십시오. 기본적으로 선택하지 않으면 설정 탭이됩니다. 내 앱이 포트 3000에서 실행 중 이었으므로 올바른 설정은 다음과 같습니다. localhost : 3000에서 실행되는 앱이 있다고 가정하면 설정은 다음과 같아야합니다.

여기에 이미지 설명 입력


19

만든 새 영역으로 인해이 오류가 발생하는 경우

리디렉션되는 URL에서 (이 URL에 대한 Chrome 개발 도구를 찾아야 할 수 있음) 영역을에서 master방금 만든 영역으로 변경하고을 사용하지 않는 경우 httpsredirect_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 단계) 이 모든 것을 파악하는 데 얼마나 걸 렸는지 묻지 마십시오.


1
이것이 내 관심을 끌었던 줄이었습니다. #change https redirect_uri 매개 변수를 http RewriteCond % {request_uri} \? % {query_string} ^ (. *) redirect_uri = https (. *) $ RewriteRule로 변경합니다. % 1redirect_uri = http % 2 [NE, R = 302] nginx를 사용하고 있지만 redirect_uri에서 https를 http로 바꾸 자마자 작동했습니다.
Telmo Dias

9

keycloak 관리 콘솔> SpringBootKeycloak> Cients> 로그인 앱 페이지로 이동합니다. 유효한 리디렉션 URI 섹션에 http : // localhost : 8080 / sso / login을 추가 하십시오.

간접 URI 문제를 해결하는 데 도움이됩니다.


13
문제는 관리 콘솔에 액세스 할 수 없다는 것입니다.
SmallChess

내가 Keycloak의 수정 후 나는이 문제를 가지고 web-context설정
마크

5

Keycloak 컨텍스트 경로를 수정 한 후이 문제가 발생하면 리디렉션 URL 설정을 추가로 변경해야합니다.

  1. standalone.xml에서 <web-context>yourchange/auth</web-context>다시 변경<web-context>auth</web-context>
  2. Keycloak을 다시 시작하고 로그인 페이지 ( /auth/admin)로 이동합니다.
  3. 로그인하고 "마스터"영역을 선택하십시오.
  4. 사이드 메뉴에서 "클라이언트"를 선택합니다.
  5. 나타나는 목록에서 "security-admin-console"클라이언트를 선택하십시오.
  6. "유효한 리디렉션 URI"를에서 다음 /auth/admin/master/console/*으로 변경하십시오./yourchange/auth/admin/master/console/*
  7. 저장하고 로그 아웃합니다. 로그 아웃 후 다시 "잘못된 리디렉션 URL"메시지가 표시됩니다.
  8. 이제 <web-context>yourchange/auth</web-context>standalone.xml Restart Keycloak에 원래 변경 사항 을 입력하고 로그인 페이지 (현재 /yourchange/auth/admin)로 이동합니다.
  9. 로그인하고 즐기십시오

1
또는 redirect_urisDB에서 테이블 을 편집 하고 값 필드를 조정할 수 있습니다
pHiL

4

Keycloak 관리 콘솔 웹 사이트에 로그인하고 영역과 해당 클라이언트를 선택한 다음 클라이언트의 모든 URI에 프로토콜이 접두사로 지정되어 있는지 확인하십시오 http://. 예는http://localhost:8082/*

문제를 해결하는 또 다른 방법은 Keycloak 서버 콘솔 출력을보고 요청이 거부되었음을 나타내는 줄을 찾은 다음 redirect_uri표시된 값을 복사 * Valid Redirect URIs하여 Keycloak 관리 콘솔 웹 사이트의 클라이언트 필드에 붙여 넣는 것입니다 . 요청 된 URI는 허용 가능한 URI 중 하나입니다.


2

http://www.baeldung.com/spring-boot-keycloak 에서 사용 가능한 스프링 부트 및 keycloak 예제를 따르는 동안 잘못된 매개 변수 : redirect_uri 문제 문제에 직면했습니다 . . keycloak 서버에서 클라이언트를 추가 할 때 keycloak 서버가 리디렉션을 수행 할 수 있도록 해당 클라이언트에 대한 리디렉션 URI를 제공해야합니다. 동일한 오류가 여러 번 발생했을 때 keycloak 서버 콘솔에서 올바른 URL을 복사하고 유효한 리디렉션 URI 공간에 제공했는데 제대로 작동했습니다!


2

나도 같은 문제에 직면했습니다. 전체 URL 뒤에 리디렉션 URL 추가 * 영역 아래에있는 특정 클라이언트로 이동하여 수정했습니다.

문제가 해결 될 것입니다

예 : 리디렉션 URI : http : localhost : 3000 / myapp / generator / *



1

전면 구성을 위해 keycloak 관리 콘솔을 확인해야합니다. 리디렉션 URL 및 웹 출처에 대해 잘못 구성되어야합니다.


1

로그 아웃 후 (예전처럼) keycloak 로그인 페이지로 리디렉션하려는 경우 기본적으로 허용되지 않지만 클라이언트 관리 콘솔의 "Valid Redirect URIs"설정에서도 구성해야합니다.


1

이 오류는 사용자 정의에서 위임 된 예상 역할이없는 경우에도 발생합니다 (드롭 다운에서 영역에 대한 역할 설정).


1

나는 같은 문제에 직면했다. 전체 URL 뒤에 리디렉션 URL 추가 * 영역 아래에있는 특정 클라이언트로 이동하여 수정했습니다.


1

나를 /위해 값에 후행 슬래시가 누락되었습니다.Valid Redirect URIs


이 솔루션을 사용하여 수정했습니다.
Sandy B

0

코드 (keycloak.init)의 리디렉션 URI는 Keycloak 서버 (클라이언트-> 유효한 Uri)에 설정된 리디렉션 URI와 동일해야합니다. 내 코드 이미지를 보려면 클릭하세요. 내 keycloak 설정을 보려면 클릭하십시오


0

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 에서 이에 대한 토론을 참조하십시오.


0

Realm 이름에 공백을 넣으면이 문제가 발생할 수 있습니다. 이름을로 설정 Debugging Realm했는데이 오류가 발생했습니다. 내가 그것을 변경했을 때 DebuggingRealm작동했습니다.

표시 이름에 여전히 공백이있을 수 있습니다. keycloak이 관리자 입력에서 이것을 확인하지 않는 것이 이상합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.