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ừ master
thà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.d
thư 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.