【问题标题】:keycloak Invalid parameter: redirect_urikeycloak 无效参数:redirect_uri
【发布时间】:2018-01-03 07:21:36
【问题描述】:

当我试图从我的 api 中点击以从 keycloak 验证用户时,但它给了我错误 Invalid parameter: redirect_uri on keycloak 页面。除了师父,我创造了自己的境界。 keycloak 在 http 上运行。请帮帮我。

【问题讨论】:

  • 在检查检查元素时显示 500 错误
  • 请不要多次发布same question。如果您想为原始问题添加更多详细信息,可以通过点击问题正下方的“编辑”来实现。
  • 在重定向 url 中检查 https 与 http
  • 在我的情况下这是一个愚蠢的错误:“”而不是“http://

标签: keycloak


【解决方案1】:

对我有用的是添加通配符 '*'。尽管对于生产版本,我将更具体地说明该字段的值。但出于开发目的,您可以这样做。

设置可用,keycloak 管理控制台 -> Realm_Name -> Cients -> Client_Name

编辑:不要在生产中这样做。这样做会造成很大的安全漏洞。

【讨论】:

  • 这个答案可能是一个危险的安全漏洞,这样做你打开了不安全重定向攻击的大门。
  • 我不敢相信这个答案目前获得最高票数。这远不是一个解决方案,它应该只出现在 cmets 中。另一方面,问题中的信息太少,甚至无法尝试回答。
  • 如果我们在移动应用中使用 Keycloak(React Native 编码),我们必须放什么?
  • @SebastianDiaz:你找到问题的答案了吗?
  • @Grogu 我几个月前尝试过,然后我们以不同的方式实现了 Keycloak。无论如何,在那一刻我在那里写了这个:http://localhost,关于这个 Keycloak 文档:keycloak.org/docs/latest/securing_apps/#redirect-uris我希望这对你有帮助。
【解决方案2】:

如果您是 .Net 开发人员,请检查以下配置 keycloakAuthentication 选项类集 CallbackPath = RedirectUri,//这个属性需要设置,否则会显示无效的redirecturi错误

我遇到了同样的错误。就我而言,问题在于 Valid Redirect URIs 不正确。所以这些是我遵循的步骤。

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

从左侧面板中选择客户。 然后选择您为应用程序配置的相关客户端。 默认情况下,您将在设置选项卡,如果没有选择它。 我的应用程序在端口 3000 上运行,所以我的正确设置如下所示。 假设你有一个应用在 localhost:3000 上运行,所以你的设置应该是这样的

【讨论】:

    【解决方案3】:

    如果您因为创建了新领域而收到此错误

    您可以直接更改 URL 栏中的 URL 以克服此错误。在您被重定向到的 URL 中(您可能必须在 Chrome 开发工具中查看此 URL),将领域从 master 更改为您刚刚创建的领域,如果您没有使用 https,请确保redirect_uri 也在使用http

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

    第 1 步) 按照 this documentation 设置 MySql 数据库(链接已损坏。如果您找到一些适合您的好的替代文档,请随时更新此链接并删除此消息)。您可能还需要参考this documentation

    第 2 步) 运行命令update REALM set ssl_required = 'NONE' where id = 'master';

    注意: 此时,从技术上讲,您应该可以登录,但 Keycloak 4.0 版使用 https 作为重定向 uri,即使我们刚刚关闭了 https 支持。在 Keycloak 修复此问题之前,我们可以使用反向代理解决此问题。无论如何,我们都希望使用反向代理来轻松创建 SSL/TLS 证书,而不必担心 Java 密钥库。

    注意 2: 写完这些说明后,Keycloak 推出了自己的代理。然后他们停止支持它并建议改用oauth2 proxy。它缺少 Keycloak 代理的一些功能,并且该代理的非官方版本仍在维护here。我没有尝试使用这些代理中的任何一个,但此时,您可能不想再按照我的指示使用其中一个了。

    第 3 步) 安装 Apache。我们将使用 Apache 作为反向代理(我尝试过 NGINX,但 NGINX 有一些限制)。请参阅 yum installing Apache (CentOs 7) 和 apt-get install Apache (Ubuntu 16),或查找特定发行版的说明。

    第 4 步)运行 Apache

    • 使用sudo systemctl start httpd(CentO)或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来设置自动更新证书。

    如果这种类型的加密不够好,并且您的安全策略需要端到端加密,您将不得不弄清楚如何setup SSL through WildFly,而不是使用反向代理。

    注意: 我实际上从来没有能够让 https 与管理门户一起正常工作。也许这可能只是我正在使用的 Keycloak 4.0 测试版中的一个错误。您应该能够将 SSL 级别设置为仅对外部请求需要它,但这似乎不起作用,这就是我们在步骤 #2 中将 https 设置为 none 的原因。从这里开始,我们将继续通过 SSH 隧道使用 http 来管理管理设置。

    第 6 步) 每当您尝试通过 https 访问该站点时,您将触发一个 HSTS 策略,该策略将自动强制 http 请求重定向到 https。按照这些说明到clear the HSTS rule from Chrome,然后暂时不要再访问https版本的网站了。

    第 7 步) 配置阿帕奇。在下面的代码块中添加虚拟主机配置。如果您从未这样做过,那么您需要做的第一件事就是弄清楚在哪里添加此配置文件。

    在 RHEL 和其他一些发行版上
    你需要找到你的httpd.conf or apache2.conf file is located。该配置文件应该从另一个文件夹(例如conf.d)加载虚拟主机配置文件。

    如果您使用的是 Ubuntu 或 Debian,
    您的配置文件将位于/etc/apache2/sites-available/ 中,您需要通过运行命令sudo a2ensite name-of-your-conf-file.conf 来启用它们。这将在/etc/apache2/sites-enabled/ 中创建一个符号链接,这是 Apache 在 Ubuntu/Debian 上查找配置文件的地方(请记住,配置文件放置在可用的站点中,略有不同)。

    所有发行版
    找到配置文件后,在配置文件中更改或添加以下虚拟主机条目。确保您没有覆盖由 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 步) 您现在应该可以登录 Keycloak 管理门户了。要连接到该网站,请转到http://127.0.0.1,SOCKS 代理会将您带到管理控制台。完成后请务必关闭 SOCKS 代理,因为它会占用您服务器的资源,如果继续打开,您的网速会变慢。

    第 11 步)不要问我花了多长时间才弄清楚这一切。

    【讨论】:

    • 这句话引起了我的注意:#change https redirect_uri parameters to http RewriteCond %{request_uri}\?%{query_string} ^(.*)redirect_uri=https(.*)$ RewriteRule 。 %1redirect_uri=http%2 [NE,R=302] 我正在使用 nginx,但是,只要我在 redirect_uri 上将 https 替换为 http,它就可以工作了。
    • 有人有这个答案的更新链接吗?
    • 我已经修复了我可以修复的链接,并更新了所有内容。
    【解决方案4】:

    转到keycloak管理控制台> SpringBootKeycloak> Cients>登录应用页面。 在有效重定向 uris 部分中添加 http://localhost:8080/sso/login

    这将有助于解决间接 uri 问题

    【讨论】:

    • 问题是管理控制台无法访问。
    • 我在修改Keycloak的web-context设置后遇到了这个问题
    【解决方案5】:

    如果您在修改 Keycloak 上下文路径后遇到此问题,则需要对重定向 url 设置进行额外更改:

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

    【讨论】:

    • 或者,您可以在数据库中编辑表redirect_uris并调整值字段
    【解决方案6】:

    对我来说,Valid Redirect URIs 的值中缺少尾部斜杠 /

    【讨论】:

      【解决方案7】:

      登录 Keycloak 管理控制台网站,选择领域及其客户端,然后确保客户端的所有 URI 都以协议为前缀,例如 http://。一个例子是http://localhost:8082/*

      解决此问题的另一种方法是查看 Keycloak 服务器控制台输出,找到说明请求被拒绝的行,从中复制 redirect_uri 显示的值并将其粘贴到客户端的 * Valid Redirect URIs 字段中Keycloak 管理控制台网站。然后,请求的 URI 就是可接受的 URI 之一。

      【讨论】:

        【解决方案8】:

        我遇到了同样的问题。我通过分别转到领域下的特定客户端来纠正它,在重定向 URL 中添加 * 在您的完整 URL 之后。

        【讨论】:

          【解决方案9】:

          即使我也面临同样的问题。我通过分别转到领域下的特定客户端来纠正它,其中重定向 URL 添加 * 在您的完整 URL 之后。

          问题将得到解决

          示例: 重定向 URI:http:localhost:3000/myapp/generator/*

          【讨论】:

            【解决方案10】:

            重定向 URL 中的“localhost”也有同样的问题。在客户端配置(KeyCloak Web 管理控制台)的“有效重定向 URIs”字段中更改为 127.0.0.1。它对我有用。

            【讨论】:

              【解决方案11】:

              我在遵循 http://www.baeldung.com/spring-boot-keycloak 上的 spring boot 和 keycloak 示例时遇到了 Invalid parameter: redirect_uri 问题。从 keycloak 服务器添加客户端时,我们必须为该客户端提供重定向 URI,以便 keycloak 服务器可以执行重定向。 当我多次遇到相同的错误时,我从 keycloak 服务器控制台复制了正确的 URL,并在有效的重定向 URI 空间中提供了它,它工作正常!

              【讨论】:

                【解决方案12】:

                当您的用户没有在用户定义中委派预期角色时也会引发此错误(在下拉菜单中为领域设置角色)。

                【讨论】:

                  【解决方案13】:

                  查看确切的重写对我来说是关键。 wellKnownUrl 查找返回“http://127.0.01:7070/”,我指定了“http://localhost:7070”;-)

                  【讨论】:

                    【解决方案14】:

                    如果您使用的是授权代码流,则 response_type 查询参数必须等于 code。见https://www.keycloak.org/docs/3.3/server_admin/topics/sso-protocols/oidc.html

                    【讨论】:

                      【解决方案15】:

                      您需要检查 keycloak 管理控制台的前端配置。必须为重定向 url 和 web 源配置错误。

                      【讨论】:

                        【解决方案16】:

                        如果您在注销后尝试重定向到 keycloak 登录页面(就像我一样),默认情况下不允许这样做,但还需要在客户端管理控制台的“有效重定向 URI”设置中进行配置.

                        【讨论】:

                          【解决方案17】:

                          您的代码中的重定向 URI (keycloak.init) 应该与 Keycloak 服务器上设置的重定向 URI 相同(客户端 -> 有效 Uri)

                          【讨论】:

                            【解决方案18】:

                            如果您在 Realm 名称中添加空格,似乎会出现此问题。我将名称设置为Debugging Realm,但出现此错误。当我更改为DebuggingRealm 时,它起作用了。

                            您仍然可以在显示名称中包含空格。奇怪的是 keycloak 没有在管理员输入时检查这个。

                            【讨论】:

                              【解决方案19】:

                              检查 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 上的讨论

                              【讨论】:

                                【解决方案20】:

                                我的问题是由我在 deployment.yaml 中定义的错误 client_id (OPENID_CLIENT_ID) 引起的。确保该字段分配有 Keycloak 客户端 ID 中的那个。

                                【讨论】:

                                  【解决方案21】:

                                  也遇到了这个问题。两天后,我发现 Keycloak 中的 URL 是区分大小写的。但是浏览器会将 URL 转换为小写,这意味着 Keycloak 中的大写 URL 将永远无法工作。

                                  例如我的服务器名称是 MYSERVER(主机名返回 MYSERVER)

                                  Keycloak URLs are https://MYSERVER:8080/*
                                  Browse to https://myserver:8080 -> fails invalid_url
                                  Browse to https://MYSERVER:8080 -> fails invalid_url
                                  Change Keycloak URLs to https://myserver:8080/*
                                  Browse to https://myserver:8080 -> works
                                  Browse to https://MYSERVER:8080 -> works
                                  

                                  【讨论】:

                                    【解决方案22】:

                                    当您更改领域名称时,有时会出现此问题。

                                    您应该转到管理面板,然后选择相应的领域,然后从侧边栏中选择客户端。然后点击account-console并相应地更改为Base URLValid Redirect URIs

                                    问题在于,当您创建领域并随后将其名称更改为其他名称时,keycloak 不会更改 account-console 客户端的 Valid Redirect URIsbase url 的值。

                                    请注意,如果您在生产环境中,只需更改 redirect_url 的值以匹配为此客户端设置的基本 url。因为更改Base URLValid Redirect URIs 可能会影响使用此客户端的其他应用程序。这正是 Keycloak 不会自动更改它的原因。

                                    【讨论】:

                                      猜你喜欢
                                      • 2021-11-16
                                      • 2020-04-02
                                      • 2018-01-03
                                      • 2022-08-24
                                      • 2019-05-03
                                      • 1970-01-01
                                      • 1970-01-01
                                      • 2013-08-30
                                      • 2016-09-04
                                      相关资源
                                      最近更新 更多