当我试图从我的api命中来从keycloak验证用户时,但是它给了我错误Invalid parameter:redirect_uri on keycloak page。除了大师,我创造了自己的境界。 keycloak正在http上运行。请帮帮我。
答案 0 :(得分:18)
对我有用的是添加通配符'*'。尽管对于生产版本,我将更具体地介绍该领域的价值。但是出于开发目的,您可以执行此操作。
在 keycloak管理控制台->领域名称->身份->客户端名称下可用的设置。
编辑:我不建议将上述解决方案用于生产版本,因为这可能会导致安全漏洞。
答案 1 :(得分:8)
转到keycloak管理控制台> SpringBootKeycloak>客户>登录 - 应用页面。 这里在valid-redirect uris部分添加 http://localhost:8080/sso/login
这将有助于解决间接问题
答案 2 :(得分:8)
我遇到了同样的错误。就我而言,问题是有效的重定向URI 不正确。这就是我遵循的步骤。
首先以管理员用户身份登录keycloack。 然后选择您的领域(也许您将自动定向到该领域)。然后您将在屏幕下方看到
从左侧面板中选择客户。 然后选择您为应用程序配置的相关客户端。 默认情况下,您将设置标签,如果未选中的话。 我的应用程序在端口3000上运行,因此我的正确设置如下所示。 假设您有一个在localhost:3000上运行的应用程序,因此您的设置应如下所示
答案 3 :(得分:6)
在您被重定向到的网址中(您可能需要查看此网址的Chrome开发者工具),将领域从master
更改为您刚创建的领域,如果您未使用https
1}},然后确保redirect_uri也使用http
。
步骤1) 按照this documentation设置MySql数据库。您可能还需要参考the official documentation。
第2步)
运行命令update REALM set ssl_required = 'NONE' where id = 'master';
注意:强> 此时,您应该在技术上能够登录,但是Keycloak的4.0版本正在使用https进行重定向uri,即使我们刚刚关闭了https支持。在Keycloak修复此问题之前,我们可以使用反向代理解决这个问题。无论如何,我们都希望使用反向代理来轻松设置https而无需担心Java密钥库。
注2: Keycloak已经推出了自己的代理。我还没有尝试过,但此时,你可能想停止关注我的指示并结账(keycloak gatekeeper)[https://www.keycloak.org/downloads.html]。如果您在设置Keycloak Gatekeeper时遇到问题,我将继续说明如何使用Apache设置反向代理。
步骤3)安装Apache。我们将使用Apache作为反向代理(我尝试了NGINX,但NGINX限制阻止我使用它)。请参阅yum installing Apache(CentOs 7)和apt-get install Apache(Ubuntu 16),或查找特定发行版的说明。
步骤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。步骤5)我们将与反向代理建立SSL连接,然后反向代理将通过http与keyCloak通信。因为这种http通信发生在同一台机器上,所以你仍然是安全的。我们可以使用Certbot来设置自动续订证书。
如果客户端加密不够好,并且您的安全策略需要端到端加密,则必须弄清楚如何setup SSL through WildFly,而不是使用反向代理。
注意:强> 我实际上从来没有能够通过管理门户使https正常工作。也许这可能只是我正在使用的Keycloak 4.0测试版中的一个错误。您可以将SSL级别设置为仅需要外部请求,但这似乎不起作用,这就是我们在步骤#2中将https设置为none的原因。从这里开始,我们将继续在SSH隧道上使用http,但我们确实需要为我们的oauth端点设置SSL证书。
第6步) 每当您尝试通过https访问该站点时,您将触发HSTS策略,该策略将自动强制http请求重定向到https。请按照以下说明操作clear the HSTS rule from Chrome,然后暂时不要再次访问该网站的https版本。
第7步)
配置Apache。
首先找到httpd.conf file is located的位置。您的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,我们需要设置另一种安全连接方法。这可以通过在keycloak服务器上安装VPN服务或使用SOCKS来完成。我使用了SOCKS代理。为此,您首先需要设置动态端口转发。
ssh -N -D 9905 user@example.com
或通过Putty进行设置。
发送到端口9905的所有流量现在都将通过SSH隧道安全地路由到您的服务器。确保将服务器防火墙上的端口9905列入白名单。
设置动态端口转发后,您需要设置浏览器以在端口9905上使用SOCKS代理。Instructions here。
步骤10)您现在应该可以立即登录该网站了。要连接到网站,请转到http://127.0.0.1,SOCKS代理将转到管理控制台。确保在完成后关闭SOCKS代理,因为它确实利用了服务器的资源,如果继续使用,将导致网速降低。
步骤11)不要问我花了多长时间来解决所有问题。
答案 4 :(得分:4)
如果对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>
重新启动Keycloak并导航到登录页面(现在是
/yourchange/auth/admin
)答案 5 :(得分:2)
我遇到了无效参数:redirect_uri问题问题,同时遵循http://www.baeldung.com/spring-boot-keycloak提供的spring boot和keycloak示例。当从keycloak服务器添加客户端时,我们必须为该客户端提供重定向URI,以便keycloak服务器可以执行重定向。 当我多次遇到同样的错误时,我跟着从keycloak服务器控制台复制正确的URL并在有效的Redirect URIs空间中提供它并且它工作正常!
答案 6 :(得分:2)
登录Keycloak管理控制台网站,选择领域及其客户端,然后确保客户端的所有URI都以协议为前缀,例如,使用http://
。一个例子是http://localhost:8082/*
解决此问题的另一种方法是查看Keycloak服务器控制台输出,找到说明请求被拒绝的行,从中复制redirect_uri
显示的值并将其粘贴到* Valid Redirect URIs
字段中Keycloak管理控制台网站中的客户端。然后,请求的URI就是其中一个接受者。
答案 7 :(得分:2)
对于我来说,我在/
的值中缺少尾部斜杠Valid Redirect URIs
答案 8 :(得分:2)
我遇到了同样的问题。我通过分别转到领域下的特定客户端(在您的完整URL之后重定向URL add *)来纠正它。
答案 9 :(得分:2)
您需要检查keycloak管理控制台以获取前端配置。必须为重定向网址和网络来源错误配置。
答案 10 :(得分:2)
即使我遇到了同样的问题。我通过分别转到领域中的特定客户端(在您的完整URL之后重定向URL add *)来纠正它。
问题将得到解决
示例: 重定向URI:http:localhost:3000 / myapp / generator / *
答案 11 :(得分:1)
如果您的用户没有在用户定义中委派的预期角色(在下拉菜单中设置领域的角色),也会引发此错误。
答案 12 :(得分:1)
如果您尝试注销后重定向到keycloak登录页面(就像我以前一样),则默认情况下不允许这样做,但还需要在客户端管理控制台的“有效重定向URI”设置中进行配置
答案 13 :(得分:0)
您在代码(keycloak.init)中的重定向URI应该与在Keycloak服务器上设置的重定向URI相同(客户端->有效Uri)
答案 14 :(得分:0)
检查所使用的客户端的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
的相关讨论答案 15 :(得分:0)
如果您使用的是授权码流,则response_type
查询参数必须等于code
。参见https://www.keycloak.org/docs/3.3/server_admin/topics/sso-protocols/oidc.html
答案 16 :(得分:0)
如果在您的Realm名称中添加空格,似乎会出现此问题。我将名称设置为Debugging Realm
,但出现此错误。当我更改为DebuggingRealm
后,它开始工作。
显示名称中仍可以有空格。奇怪的是,密钥斗篷没有在管理员输入中对此进行检查。
答案 17 :(得分:0)
查看确切的重写对我来说很重要。 wellKnownUrl 查找返回“http://127.0.01:7070/”并且我指定了“http://localhost:7070”;-)
答案 18 :(得分:0)
也遇到了这个问题。经过两天的摸索,我发现 Keycloak 中的 URL 区分大小写。但是浏览器会将 URL 转换为小写,这意味着 Keycloak 中的大写 URL 将永远无法使用。
例如我的服务器名称是 MYSERVER(主机名返回 MYSERVER)
Keycloak URLs are https://MYSERVER:8080/*
Browse to https://myserver:8080 -> fails invalid_url
Browse to https://MYSERFER:8080 -> fails invalid_url
Change Keycloak URLs to https://myserver:8080/*
Browse to https://myserver:8080 -> works
Browse to https://MYSERFER:8080 -> works
答案 19 :(得分:0)
我的问题是由我在 deployment.yaml 中定义的错误 client_id (OPENID_CLIENT_ID) 引起的。确保此字段分配有 Keycloak 客户端 ID 中的一个。