keycloak Tham số không hợp lệ: redirect_uri


82

Khi tôi đang cố gắng truy cập từ api của mình để xác thực người dùng từ keycloak, nhưng nó cho tôi lỗi Tham số không hợp lệ: redirect_uri trên trang keycloak. Tôi đã tạo ra cảnh giới của riêng mình ngoài chủ nhân. keycloak đang chạy trên http. Làm ơn giúp tôi.


trong khi kiểm tra thông qua phần tử kiểm tra nó hiển thị lỗi 500
VIJAY THAKUR

2
Vui lòng không đăng cùng một câu hỏi nhiều lần. Nếu bạn muốn thêm các chi tiết khác vào câu hỏi ban đầu của mình, bạn có thể thực hiện việc đó bằng cách nhấp vào 'chỉnh sửa' ngay bên dưới câu hỏi của mình.
THelper


1
Kiểm tra https so với http trong url chuyển hướng
ThomasRS

1
Trong trường hợp của tôi, đó là một sai lầm ngớ ngẩn: "<địa chỉ IP>" thay vì "http: // <địa chỉ IP>"
SwissNavy

Câu trả lời:


53

Điều làm việc cho tôi là thêm ký tự đại diện '*' . Mặc dù đối với các công trình sản xuất, tôi sẽ nói rõ hơn về giá trị của lĩnh vực này. Nhưng đối với mục đích của nhà phát triển, bạn có thể làm điều này.

nhập mô tả hình ảnh ở đây

Cài đặt có sẵn trong bảng điều khiển quản trị keycloak -> Realm_Name -> Cient -> Client_Name .

CHỈNH SỬA: KHÔNG LÀM ĐIỀU NÀY TRONG SẢN XUẤT. Làm như vậy sẽ tạo ra một lỗ hổng bảo mật lớn.


13
Câu trả lời này có thể là một lỗ hổng bảo mật nguy hiểm, làm như vậy bạn sẽ mở ra cánh cửa cho cuộc tấn công chuyển hướng không an toàn.
Michael Courcy

Tôi không thể tin rằng câu trả lời này hiện đang có phiếu bầu cao nhất. Đây không phải là một giải pháp và nó thực sự chỉ nên xuất hiện trong các bình luận. Mặt khác, có quá ít thông tin trong câu hỏi để cố gắng trả lời.
bsaverino

35

Nếu bạn là .Net Devloper Vui lòng kiểm tra bên dưới Cấu hình keycloakAuthentication options class set CallbackPath = RedirectUri, // Thuộc tính này cần được thiết lập khác, nó sẽ hiển thị lỗi redirecturi không hợp lệ

Tôi phải đối mặt với cùng một lỗi. Trong trường hợp của tôi, sự cố xảy ra với URI chuyển hướng hợp lệ không đúng. Vì vậy, đây là các bước tôi đã làm theo.

Lần đầu tiên đăng nhập vào keycloack với tư cách là người dùng quản trị. Sau đó Chọn cảnh giới của bạn (có thể bạn sẽ tự động chuyển hướng đến cảnh giới). Sau đó, bạn sẽ thấy màn hình bên dưới

nhập mô tả hình ảnh ở đây

Chọn Khách hàng từ bảng điều khiển bên trái. Sau đó, chọn ứng dụng khách có liên quan mà bạn đã định cấu hình cho ứng dụng của mình. Theo mặc định, bạn sẽ là tab Setting , nếu không chọn nó. Ứng dụng của tôi đang chạy trên cổng 3000, vì vậy cài đặt chính xác của tôi như bên dưới. giả sử bạn có một ứng dụng chạy trên localhost: 3000, vì vậy cài đặt của bạn sẽ như thế này

nhập mô tả hình ảnh ở đây


18

Nếu bạn gặp lỗi này do một cảnh giới mới bạn đã tạo

Trong URL mà bạn được chuyển hướng đến (bạn có thể phải tìm trong các công cụ dành cho nhà phát triển Chrome cho URL này), hãy thay đổi vùng từ masterthành vùng bạn vừa tạo và nếu bạn không sử dụng https, thì hãy đảm bảo rằng redirect_uri cũng đang sử dụng http.

Nếu bạn gặp lỗi này vì bạn đang cố thiết lập Keycloak trên miền công khai (không phải localhost)

Bước 1) Làm theo tài liệu này để thiết lập cơ sở dữ liệu MySql. Bạn cũng có thể cần tham khảo tài liệu chính thức .

Bước 2) Chạy lệnhupdate REALM set ssl_required = 'NONE' where id = 'master';

Lưu ý: Tại thời điểm này, về mặt kỹ thuật, bạn đã có thể đăng nhập, nhưng phiên bản 4.0 của Keycloak đang sử dụng https cho chuyển hướng uri mặc dù chúng tôi vừa tắt hỗ trợ https. Cho đến khi Keycloak sửa lỗi này, chúng tôi có thể giải quyết vấn đề này bằng proxy ngược. Một proxy ngược là thứ mà chúng tôi sẽ muốn sử dụng bằng mọi cách để dễ dàng tạo chứng chỉ SSL / TLS mà không phải lo lắng về kho khóa Java.

Lưu ý 2: Keycloak kể từ đó đã xuất hiện với proxy của riêng họ. Tôi chưa thử điều này, nhưng tại thời điểm này, bạn có thể muốn dừng lại theo chỉ dẫn của tôi và kiểm tra (keycloak gatekeeper) [ https://www.keycloak.org/downloads.html] . Nếu bạn gặp sự cố khi thiết lập Keycloak Gatekeeper, tôi sẽ tiếp tục hướng dẫn về cách thiết lập proxy ngược với Apache.

Bước 3) Cài đặt Apache. Chúng tôi sẽ sử dụng Apache làm proxy ngược (Tôi đã thử NGINX, nhưng NGINX có một số hạn chế cản trở). Xem cách cài đặt Apache (CentOs 7) và apt-get install Apache (Ubuntu 16) hoặc tìm hướng dẫn cho bản phân phối cụ thể của bạn.

Bước 4) Chạy Apache

  • Sử dụng sudo systemctl start httpd (CentOs) hoặc sudo systemctl start apache2(Ubuntu)

  • Sử dụng sudo systemctl status httpd(CentOs) hoặc sudo systemctl status apache2 (Ubuntu) để kiểm tra xem Apache có đang chạy hay không. Nếu bạn nhìn thấy dòng chữ màu xanh lụcactive (running) hoặc nếu mục cuối cùng đọc Started The Apache HTTP Server.thì bạn tốt.

Bước 5) Chúng tôi sẽ thiết lập kết nối SSL với proxy ngược và sau đó proxy ngược sẽ giao tiếp với keyCloak qua http. Vì giao tiếp http này diễn ra trên cùng một máy nên bạn vẫn an toàn. Chúng tôi có thể sử dụng Certbot để thiết lập chứng chỉ tự động gia hạn.

Nếu loại mã hóa này không đủ tốt và chính sách bảo mật của bạn yêu cầu mã hóa đầu cuối, bạn sẽ phải tìm ra cách thiết lập SSL thông qua WildFly , thay vì sử dụng proxy ngược.

Ghi chú: Tôi thực sự không bao giờ có thể làm cho https hoạt động bình thường với cổng quản trị. Có lẽ đây chỉ là một lỗi trong phiên bản beta của Keycloak 4.0 mà tôi đang sử dụng. Bạn được cho là có thể đặt mức SSL để chỉ yêu cầu nó cho các yêu cầu bên ngoài, nhưng điều này dường như không hoạt động, đó là lý do tại sao chúng tôi đặt https thành không ở bước # 2. Từ đây trở đi, chúng tôi sẽ tiếp tục sử dụng http qua đường hầm SSH để quản lý cài đặt quản trị viên.

Bước 6) Bất cứ khi nào bạn cố gắng truy cập trang web qua https, bạn sẽ kích hoạt chính sách HSTS sẽ tự động buộc các yêu cầu http chuyển hướng đến https. Làm theo các hướng dẫn sau để xóa quy tắc HSTS khỏi Chrome và tạm thời, không truy cập lại phiên bản https của trang web.

Bước 7) Cấu hình Apache. Trước tiên hãy tìm nơi chứa tệp httpd.conf của bạn . Tệp httpd.conf của bạn có thể bao gồm các tệp cấu hình từ một thư mục riêng biệt. Trong trường hợp của tôi, tôi tìm thấy tất cả tệp cấu hình của mình trong một conf.dthư mục nằm liền kề với thư mục chứa tệp httpd.conf.

Sau khi bạn tìm thấy tệp conf của mình, hãy thay đổi hoặc thêm các mục nhập máy chủ ảo sau đây vào tệp conf của bạn. Đảm bảo rằng bạn không ghi đè các tùy chọn SSL hiện tại đã được tạo bởi certbot. Khi hoàn tất, tệp cấu hình của bạn sẽ trông giống như thế này.

<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>

Bước 8) Khởi động lại Apache. Sử dụng sudo systemctl restart httpd(CentOs) hoặc sudo systemctl restart apache2(Ubuntu).

Bước 9) Trước khi bạn có cơ hội thử đăng nhập vào máy chủ, vì chúng tôi đã yêu cầu Keycloak sử dụng http, chúng tôi cần thiết lập một phương pháp kết nối an toàn khác. Điều này có thể được thực hiện bằng cách cài đặt dịch vụ VPN trên máy chủ keycloak hoặc bằng cách sử dụng SOCKS. Tôi đã sử dụng proxy SOCKS. Để làm điều này, trước tiên bạn cần thiết lập chuyển tiếp cổng động.

ssh -N -D 9905 user@example.com

Hoặc thiết lập nó qua Putty .

Tất cả lưu lượng được gửi đến cổng 9905 giờ đây sẽ được định tuyến an toàn qua đường hầm SSH đến máy chủ của bạn. Đảm bảo bạn đưa cổng 9905 vào danh sách trắng trên tường lửa của máy chủ.

Khi bạn đã thiết lập chuyển tiếp cổng động, bạn sẽ cần thiết lập trình duyệt của mình để sử dụng proxy SOCKS trên cổng 9905. Hướng dẫn tại đây .

Bước 10) Bây giờ bạn có thể đăng nhập vào cổng quản trị Keycloak. Để kết nối với trang web, hãy truy cập http://127.0.0.1 và proxy SOCKS sẽ đưa bạn đến bảng điều khiển dành cho quản trị viên. Đảm bảo rằng bạn tắt proxy SOCKS khi hoàn tất vì nó sử dụng tài nguyên của máy chủ của bạn và sẽ dẫn đến tốc độ internet chậm hơn cho bạn nếu vẫn tiếp tục.

Bước 11) Đừng hỏi tôi đã mất bao lâu để tìm ra tất cả những điều này.


1
Đây là dòng khiến tôi chú ý: # thay đổi thông số https redirect_uri thành http RewriteCond% {request_uri} \?% {Query_string} ^ (. *) Redirect_uri = https (. *) $ RewriteRule. % 1redirect_uri = http% 2 [NE, R = 302] Tôi đang sử dụng nginx nhưng ngay sau khi tôi thay thế https thành http trên redirect_uri, nó đã hoạt động.
Telmo Dias

9

Đi tới bảng điều khiển quản trị keycloak> SpringBootKeycloak> Cient> trang đăng nhập-ứng dụng. Ở đây trong phần uris chuyển hướng hợp lệ, hãy thêm http: // localhost: 8080 / sso / login

Điều này sẽ giúp giải quyết vấn đề đi tiểu gián tiếp


13
Vấn đề là bảng điều khiển quản trị không thể truy cập được.
SmallChess

Tôi gặp sự cố này sau khi sửa đổi web-contextcài đặt của Keycloak
Đánh dấu

5

Nếu bạn gặp sự cố này sau khi thực hiện sửa đổi đường dẫn ngữ cảnh Keycloak, bạn sẽ cần thực hiện một thay đổi bổ sung đối với cài đặt url chuyển hướng:

  1. Thay đổi <web-context>yourchange/auth</web-context> trở lại <web-context>auth</web-context>trong standalone.xml
  2. Khởi động lại Keycloak và điều hướng đến trang đăng nhập (/auth/admin )
  3. Đăng nhập và chọn lĩnh vực "Master"
  4. Chọn "Khách hàng" từ menu bên
  5. Chọn ứng dụng khách "bảo mật-quản trị-bảng điều khiển" từ danh sách xuất hiện
  6. Thay đổi "URI chuyển hướng hợp lệ" từ /auth/admin/master/console/*thành /yourchange/auth/admin/master/console/*
  7. Lưu và đăng xuất. Bạn sẽ lại thấy thông báo "Url chuyển hướng không hợp lệ" sau khi đăng xuất.
  8. Bây giờ, hãy đặt thay đổi ban đầu của bạn <web-context>yourchange/auth</web-context>trong standalone.xml Khởi động lại Keycloak và điều hướng đến trang đăng nhập (bây giờ là /yourchange/auth/admin)
  9. Đăng nhập và tận hưởng

1
Ngoài ra, bạn có thể chỉnh sửa bảng redirect_uristrong DB và điều chỉnh các trường giá trị
pHiL

4

Đăng nhập vào trang web bảng điều khiển quản trị Keycloak, chọn lĩnh vực và ứng dụng khách của nó, sau đó đảm bảo rằng tất cả các URI của ứng dụng khách đều được gắn tiền tố với giao thức, http://ví dụ: Một ví dụ sẽ làhttp://localhost:8082/*

Một cách khác để giải quyết vấn đề, là xem đầu ra của bảng điều khiển máy chủ Keycloak, tìm dòng cho biết yêu cầu đã bị từ chối, sao chép từ đó redirect_urigiá trị được hiển thị và dán vào * Valid Redirect URIstrường của máy khách trong trang web bảng điều khiển quản trị Keycloak. URI được yêu cầu sau đó là một trong những giá trị được chấp nhận.


2

Tôi gặp phải vấn đề tham số Không hợp lệ: redirect_uri problem khi làm theo ví dụ về khởi động mùa xuân và keycloak có sẵn tại http://www.baeldung.com/spring-boot-keycloak . khi thêm máy khách từ máy chủ keycloak, chúng tôi phải cung cấp URI chuyển hướng cho máy khách đó để máy chủ keycloak có thể thực hiện chuyển hướng. Khi tôi gặp phải lỗi tương tự nhiều lần, tôi đã sao chép đúng URL từ bảng điều khiển máy chủ keycloak và được cung cấp trong không gian URI chuyển hướng hợp lệ và nó hoạt động tốt!


2

thậm chí tôi phải đối mặt với vấn đề tương tự. Tôi đã khắc phục nó bằng cách đi đến khách hàng cụ thể trong lĩnh vực tương ứng trong đó URL chuyển hướng thêm * sau URL hoàn chỉnh của bạn.

VẤN ĐỀ SẼ ĐƯỢC GIẢI QUYẾT

Ví dụ: chuyển hướng URI: http: localhost: 3000 / myapp /vator / *



1

Bạn cần kiểm tra bảng điều khiển quản trị keycloak để biết cấu hình phía trước. Nó phải được định cấu hình sai cho url chuyển hướng và nguồn gốc web.


1

Nếu bạn đang cố gắng chuyển hướng đến trang đăng nhập keycloak sau khi đăng xuất (như tôi đã đăng xuất), điều đó không được phép theo mặc định nhưng cũng cần được định cấu hình trong cài đặt "URI chuyển hướng hợp lệ" trong bảng điều khiển quản trị của ứng dụng khách của bạn.


1

Lỗi này cũng xảy ra khi Người dùng của bạn không có Vai trò dự kiến ​​được ủy quyền trong định nghĩa Người dùng (Đặt vai trò cho Vương quốc trong trình đơn thả xuống).


1

Tôi phải đối mặt với cùng một vấn đề. Tôi đã khắc phục nó bằng cách đi đến khách hàng cụ thể trong lĩnh vực tương ứng trong đó URL chuyển hướng thêm * sau URL hoàn chỉnh của bạn.


1

Đối với tôi, tôi đã thiếu một dấu gạch chéo /trong giá trị choValid Redirect URIs


đã sửa nó bằng giải pháp này.
Sandy B

0

URI chuyển hướng trong mã của bạn (keycloak.init) phải giống với URI chuyển hướng được đặt trên máy chủ Keycloak (máy khách -> Uri hợp lệ) bấm để xem hình ảnh mã của tôi bấm để xem cài đặt móc khóa của tôi


0

Kiểm tra xem giá trị của tham số redirect_uri có nằm trong danh sách trắng cho ứng dụng khách mà bạn đang sử dụng hay không. Bạn có thể quản lý cấu hình của máy khách thông qua bảng điều khiển dành cho quản trị viên.

Tiểu chuyển hướng phải khớp chính xác với một trong các tiểu chuyển hướng trong danh sách trắng hoặc bạn có thể sử dụng ký tự đại diện ở cuối tiểu mà bạn muốn đưa vào danh sách trắng. Xem: https://www.keycloak.org/docs/latest/server_admin/#_clients

Lưu ý rằng việc sử dụng ký tự đại diện để chuyển hướng uri trong danh sách trắng được Keycloak cho phép, nhưng thực tế là vi phạm đặc điểm kỹ thuật của OpenId Connect. Xem thảo luận về vấn đề này tại https://lists.jboss.org/pipermail/keycloak-dev/2018-December/011440.html


0

Có vẻ như sự cố này có thể xảy ra nếu bạn đặt khoảng trắng trong tên Vương quốc của mình. Tôi đã đặt tên thành Debugging Realmvà tôi gặp lỗi này. Khi tôi đổi thànhDebuggingRealm nó đã hoạt động.

Bạn vẫn có thể có khoảng trắng trong tên hiển thị. Kỳ lạ là keycloak không kiểm tra điều này trên đầu vào của quản trị viên.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.