<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>
9 回答
对我有用的是添加wildchar '*' . 虽然对于 生产环境 版本,我将更具体地了解该字段的 Value . 但是出于开发目的,你可以做到这一点 .
设置可用,keycloak管理控制台 - > Realm_Name - > Cients - > Client_Name .
编辑:我不建议 生产环境 构建的上述解决方案,因为这可能会导致安全漏洞 .
你需要检查keycloak管理控制台的前端配置 . 它必须错误地配置重定向网址和网络来源 .
转到keycloak管理控制台> SpringBootKeycloak> Cients> login-app页面 . 这里在valid-redirect uris部分添加http://localhost:8080/sso/login
这将有助于解决间接问题
登录Keycloak管理控制台网站,选择领域及其客户端,然后确保客户端的所有URI都以协议为前缀,例如,使用
http://
. 一个例子是http://localhost:8082/*
解决此问题的另一种方法是查看Keycloak服务器控制台输出,找到说明请求被拒绝的行,从中复制
redirect_uri
显示的值并将其粘贴到Keycloak管理控制台网站中客户端的* Valid Redirect URIs
字段中 . 然后,请求的URI就是其中一个接受者 .我遇到了同样的错误 . 在我的情况下,问题是 Valid Redirect URIs 不正确 . 所以这些是我遵循的步骤 .
首先以管理员用户身份登录keycloack . 然后选择你的领域(也许你会自动指向领域) . 然后你会看到下面的屏幕
从左侧面板中选择 Clients . 然后选择您为应用配置的相关客户端 . 默认情况下,如果没有选择它,您将是 Setting 标签 . 我的应用程序在端口3000上运行,所以我的正确设置如下所示 . 假设你有一个应用程序在localhost:3000上运行,所以你的设置应该是这样的
我遇到了无效的参数:redirect_uri问题问题,同时遵循 spring 启动和http://www.baeldung.com/spring-boot-keycloak提供的keycloak示例 . 当从keycloak服务器添加客户端时,我们必须为该客户端提供重定向URI,以便keycloak服务器可以执行重定向 . 当我多次遇到相同的错误时,我跟着从keycloak服务器控制台复制正确的URL并在有效的重定向URI空间中提供它并且它工作正常!
如果由于您创建的新领域而出现此错误
在您重定向到的网址中(您可能需要查看此网址的Chrome开发工具),将领域从
master
更改为您刚刚创建的领域,如果您不使用https
,请确保redirect_uri也是使用http
.如果您收到此错误,因为您尝试在面向公众的域(而不是localhost)上设置Keycloak
Step 1) 按照this documentation设置MySql数据库 . 您可能还需要参考the official documentation .
Step 2) 运行命令
update REALM set ssl_required = 'NONE' where id = 'master';
Note: 此时,您应该在技术上能够登录,但是Keycloak 4.0版正在使用https进行重定向uri,即使我们刚刚关闭了https支持 . 在Keycloak修复此问题之前,我们可以使用反向代理解决这个问题 . 无论如何,我们都希望使用反向代理来轻松设置https而无需担心Java密钥库 .
Step 3) 安装Apache . 我们将使用Apache作为反向代理(我尝试了NGINX,但NGINX限制阻止我使用它) . 请参阅yum installing Apache(CentOs 7)和apt-get install Apache(Ubuntu 16),或查找特定发行版的说明 .
Step 4) 运行Apache
使用
sudo systemctl start httpd
(CentOs)或sudo systemctl start apache2
(Ubuntu)查看Apache是否已在运行 . 如果最后一个条目读取Started The Apache HTTP Server.
那么你的好 .使用
sudo systemctl start httpd
(CentOs)或sudo systemctl start apache2
(Ubuntu)启动Apache .Step 5) 我们将与反向代理 Build SSL连接,然后反向代理将通过http与keyCloak通信 . 因为这种http通信发生在同一台机器上,所以你仍然是安全的 . 我们可以使用Certbot来设置自动续订证书 .
如果客户端加密不够好,并且您的安全策略需要端到端加密,则必须弄清楚如何setup SSL through WildFly,而不是使用反向代理 .
Note: 我实际上从来没有能够通过管理门户使https正常工作 . 也许这可能只是Keycloak 4.0测试版中的一个错误,我认为能够将SSL级别设置为仅需要外部请求,但这似乎不起作用,这就是我们设置https的原因在步骤#2中没有 . 从这里开始,我们将继续在SSH隧道上使用http,但我们确实需要为我们的oauth设置SSL证书 endpoints .
Step 6) 每当您尝试通过https访问该站点时,您将触发HSTS策略,该策略将自动强制http请求重定向到https . 按照这些说明进行clear the HSTS rule from Chrome,然后暂时不要再访问该网站的https版本 .
Step 7) 配置Apache . 首先找到你的httpd.conf file is located . 您的httpd.conf文件可能包含来自单独目录的文件 . 在我的例子中,我发现我的所有配置文件都在
conf.d
目录中,位于httpd.conf文件所在的文件夹旁边 .找到conf文件后,在conf文件中更改或添加以下虚拟主机条目 . 确保不要覆盖certbot生成的已存在的SSL选项 . 完成后,您的配置文件应如下所示 .
Step 8) 重启Apache . 使用
sudo systemctl restart httpd
(CentOs)或sudo systemctl restart apache2
(Ubuntu) .Step 9) 在您有机会尝试登录服务器之前,由于我们告诉Keycloak使用http,我们需要设置另一种安全连接方法 . 这可以通过在keycloak服务器上安装VPN服务或使用SOCKS来完成 . 我使用了SOCKS代理 . 为此,您首先需要设置动态端口转发 .
ssh -N -D 9905 user@example.com
或者通过Putty进行设置 .
现在,发送到端口9905的所有流量都将通过SSH隧道安全地路由到您的服务器 . 确保将服务器防火墙上的端口9905列入白名单 .
完成动态端口转发设置后,您需要设置浏览器以在端口9905上使用SOCKS代理 . Instructions here .
Step 10) 您现在应该可以立即登录该网站了 . 要连接到网站,请转到http://127.0.0.1,SOCKS代理将转到管理控制台 . 确保在're done as it does utilize your server'资源时关闭SOCKS代理,如果继续,将导致网速较慢 .
Step 11) 不要问我花了多长时间才弄明白这一切 .
如果您在修改Keycloak上下文路径后看到此问题,则需要对重定向网址设置进行其他更改:
在standalone.xml中将
<web-context>yourchange/auth</web-context>
更改回<web-context>auth</web-context>
重启Keycloak并导航到登录页面(
/auth/admin
)登录并选择"Master"领域
从侧面菜单中选择"Clients"
从显示的列表中选择"security-admin-console"客户端
将"Valid Redirect URIs"从
/auth/admin/master/console/*
更改为/yourchange/auth/admin/master/console/*
保存并退出 . 退出后,您将再次看到"Invalid redirect url"消息 .
现在,在standalone.xml中输入原始更改
<web-context>yourchange/auth</web-context>
重新启动Keycloak并导航到登录页面(现在是/yourchange/auth/admin
)登录并享受
如果您使用授权代码流,则
response_type
查询参数必须等于code
. 见https://www.keycloak.org/docs/3.3/server_admin/topics/sso-protocols/oidc.html