keycloak参数无效:redirect_uri

时间:2017-07-27 13:53:36

标签: keycloak

当我试图从我的api命中来从keycloak验证用户时,但是它给了我错误Invalid parameter:redirect_uri on keycloak page。除了大师,我创造了自己的境界。 keycloak正在http上运行。请帮帮我。

20 个答案:

答案 0 :(得分:18)

对我有用的是添加通配符'*'。尽管对于生产版本,我将更具体地介绍该领域的价值。但是出于开发目的,您可以执行此操作。

enter image description here

keycloak管理控制台->领域名称->身份->客户端名称下可用的设置。

编辑:我不建议将上述解决方案用于生产版本,因为这可能会导致安全漏洞。

答案 1 :(得分:8)

转到keycloak管理控制台> SpringBootKeycloak>客户>登录 - 应用页面。 这里在valid-redirect uris部分添加 http://localhost:8080/sso/login

这将有助于解决间接问题

答案 2 :(得分:8)

我遇到了同样的错误。就我而言,问题是有效的重定向URI 不正确。这就是我遵循的步骤。

首先以管理员用户身份登录keycloack。 然后选择您的领域(也许您将自动定向到该领域)。然后您将在屏幕下方看到

enter image description here

从左侧面板中选择客户。 然后选择您为应用程序配置的相关客户端。 默认情况下,您将设置标签,如果未选中的话。 我的应用程序在端口3000上运行,因此我的正确设置如下所示。 假设您有一个在localhost:3000上运行的应用程序,因此您的设置应如下所示

enter image description here

答案 3 :(得分:6)

如果由于您创建的新领域而出现此错误

在您被重定向到的网址中(您可能需要查看此网址的Chrome开发者工具),将领域从master更改为您刚创建的领域,如果您未使用https 1}},然后确保redirect_uri也使用http

如果您因为尝试在面向公众的域(而非localhost)上设置Keycloak而收到此错误

步骤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设置进行其他更改:

  1. <web-context>yourchange/auth</web-context>更改回 <web-context>auth</web-context>在standalone.xml
  2. 重新启动Keycloak并导航到登录页面(/auth/admin
  3. 登录并选择“主”领域
  4. 从侧面菜单中选择“客户”
  5. 从出现的列表中选择“ security-admin-console”客户端
  6. 将“有效重定向URI”从/auth/admin/master/console/*更改为 /yourchange/auth/admin/master/console/*
  7. 保存并退出。退出后,您会再次看到“无效的重定向网址”消息。
  8. 现在,输入您的原始零钱 standalone.xml中的<web-context>yourchange/auth</web-context> 重新启动Keycloak并导航到登录页面(现在是 /yourchange/auth/admin
  9. 登录并享受

答案 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) click to view image of my code click to view my keycloak settings

答案 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 中的一个。