当我尝试从我的api击中来自keycloak的用户身份,但是它给我错误信息:Invalid parameter:keycloak页面上的redirect_uri。除了主人,我已经建立了自己的境界。keycloak在http上运行。请帮我。
Answers:
如果您是.Net开发者,请检查以下配置keycloakAuthentication选项类设置CallbackPath = RedirectUri,//此属性需要进行其他设置,否则将显示无效的redirecturi错误
我遇到了同样的错误。就我而言,问题是 有效重定向URI不正确。这就是我遵循的步骤。
首先以管理员用户身份登录keycloack。然后选择您的领域(也许您将自动定向到该领域)。然后你会看到下面的屏幕
从左侧面板中选择客户端。然后选择您为应用程序配置的相关客户端。默认情况下,您将处于“设置”选项卡,如果未选择它。我的应用程序在端口3000上运行,因此我的正确设置如下所示。假设您有一个在localhost:3000上运行的应用程序,因此您的设置应如下所示
在您重定向到的URL中(您可能必须在Chrome开发工具中查找此URL),将领域从更改为master
刚创建的领域,如果您没有使用https
,请确保redirect_uri也正在使用http
。
步骤1) 按照本文档设置MySql数据库。您可能还需要参考官方文档。
步骤2)
运行命令update REALM set ssl_required = 'NONE' where id = 'master';
注意: 在这一点上,从技术上讲您应该可以登录,但是即使我们刚刚关闭了https支持,Keycloak的4.0版也将https用于重定向uri。在Keycloak修复此问题之前,我们可以使用反向代理解决此问题。我们将要使用反向代理轻松地创建SSL / TLS证书,而不必担心Java密钥库。
注意2:此后,Keycloak附带了自己的代理。我还没有尝试过,但是在这一点上,您可能想停止按照我的指示去检查(keycloak gatekeeper)[ https://www.keycloak.org/downloads.html]。如果您在设置Keycloak Gatekeeper时遇到问题,我将按照我的说明进行操作,以使用Apache设置反向代理。
步骤3)安装Apache。我们将使用Apache作为反向代理(我尝试了NGINX,但是NGINX遇到了一些限制)。请参阅yum安装Apache(CentOs 7)和apt-get安装Apache(Ubuntu 16),或查找特定发行版的说明。
步骤4)运行Apache
使用sudo systemctl start httpd
(CentOs)或sudo systemctl start apache2
(Ubuntu)
使用sudo systemctl status httpd
(CentOs)或sudo systemctl status apache2
(Ubuntu)检查Apache是否正在运行。如果您看到绿色文字,active (running)
或者最后一个条目显示为“Started The Apache HTTP Server.
好”。
步骤5)我们将与反向代理建立SSL连接,然后反向代理将通过http与keyCloak通信。由于此HTTP通信是在同一台计算机上进行的,因此您仍然是安全的。我们可以使用Certbot来设置自动更新证书。
如果这种类型的加密还不够好,并且您的安全策略需要端到端加密,那么您将必须弄清楚如何通过WildFly而不是使用反向代理来设置SSL。
注意: 实际上,我从来没有能够使https与管理门户正常工作。也许这可能只是我使用的Keycloak 4.0 beta版中的一个错误。您假设能够将SSL级别设置为仅对外部请求需要它,但这似乎不起作用,这就是为什么我们在步骤2中将https设置为none的原因。从这里开始,我们将继续通过SSH隧道使用http来管理管理员设置。
第6步) 无论何时尝试通过https访问网站,都会触发HSTS策略,该策略将自动强制http请求重定向到https。请按照以下说明从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
(CentOs)或sudo systemctl restart apache2
(Ubuntu)。
步骤9) 在您有机会尝试登录服务器之前,由于我们告诉Keycloak使用http,因此我们需要设置另一种安全连接方法。这可以通过在密钥斗篷服务器上安装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>登录应用程序页面。在有效重定向uris部分中,添加 http:// localhost:8080 / sso / login
这将有助于解决间接uri问题
web-context
设置后,我遇到了这个问题
修改Keycloak上下文路径后,如果发现此问题,则需要对重定向URL设置进行其他更改:
<web-context>yourchange/auth</web-context>
回
<web-context>auth</web-context>
standalone.xml/auth/admin
)/auth/admin/master/console/*
为
/yourchange/auth/admin/master/console/*
<web-context>yourchange/auth</web-context>
放入standalone.xml中。重新启动Keycloak并导航到登录页面(现在是
/yourchange/auth/admin
)redirect_uris
在数据库中编辑表并调整值字段
我在以下Spring Boot和Keycloak示例(位于http://www.baeldung.com/spring-boot-keycloak)上时遇到了Invalid parameter:redirect_uri问题问题。从keycloak服务器添加客户端时,我们必须为该客户端提供重定向URI,以便keycloak服务器可以执行重定向。当我多次遇到相同的错误时,我接着从keycloak服务器控制台复制了正确的URL,并在有效的Redirect URIs空间中提供了它,效果很好!
如果您使用的是授权码流,则response_type
查询参数必须等于code
。参见https://www.keycloak.org/docs/3.3/server_admin/topics/sso-protocols/oidc.html
如果您尝试注销后重定向到keycloak登录页面(就像我以前一样),则默认情况下不允许这样做,但还需要在客户端管理控制台的“有效重定向URI”设置中进行配置。
检查您正在使用的客户端的redirect_uri参数的值是否已列入白名单。您可以通过管理控制台管理客户端的配置。
重定向uri应该与列入白名单的重定向uri之一完全匹配,或者您可以在要白名单的uri末尾使用通配符。请参阅:https://www.keycloak.org/docs/latest/server_admin/#_clients
请注意,Keycloak允许使用通配符将uri列入白名单,但实际上违反了OpenId Connect规范。请参阅https://lists.jboss.org/pipermail/keycloak-dev/2018-December/011440.html上对此的讨论