keycloak参数无效:redirect_uri

VIJ*_*KUR 45 keycloak

当我试图从我的api命中来从keycloak验证用户,但它给我错误无效参数:keycloak页面上的redirect_uri.除了大师,我创造了自己的境界.keycloak正在http上运行.请帮我.

try*_*arn 33

对我有用是添加wildchar '*'.虽然对于生产版本,我将更具体地说明这个领域的价值.但是出于开发目的,你可以做到这一点.

在此输入图像描述

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

编辑:我不建议生产构建的上述解决方案,因为这可能会导致安全漏洞.

  • 该答案可能是一个危险的安全漏洞,这样做会打开不安全的重定向攻击的大门。 (2认同)
  • 我不敢相信这个答案目前获得最高票数。这远不是一个解决方案,它实际上应该只出现在评论中。另一方面,问题中的信息太少,甚至无法尝试回答。 (2认同)

小智 23

KEYCLOAK 18 的重要更新

在最新的 keycloak 18 中,他们已弃用 openid 连接注销的 redirect_uri 变量 -> https://www.keycloak.org/docs/latest/upgrading/index.html#openid-connect-logout


Men*_*han 19

我遇到了同样的错误.在我的情况下,问题是 有效重定向URI不正确.所以这些是我遵循的步骤.

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

在此输入图像描述

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

在此输入图像描述


wp-*_*com 14

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

在您重定向到的URL中(您可能必须在Chrome开发工具中查找此URL),将领域从更改为master刚创建的域,如果您未使用https,请确保redirect_uri也正在使用http

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

步骤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>
Run Code Online (Sandbox Code Playgroud)

步骤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列入白名单。

一旦你有动态端口转发设置,您将需要设置你的浏览器上的端口使用SOCKS代理9905. 这里说明

步骤10)您现在应该能够登录Keycloak管理门户。要连接到该网站,请访问http://127.0.0.1,SOCKS代理将带您进入管理控制台。确保完成后关闭SOCKS代理,因为它确实利用了服务器的资源,如果继续使用,将会导致互联网速度变慢。

步骤11)不要问我花了多长时间才能弄清所有这些。


Ste*_*ane 12

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

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


tni*_*ada 10

[适用于 Keycloak 版本 18 或更高版本]

如果您使用的是Keycloak 18或更高版本,则上述解决方案均无效。

根据版本 18 发行说明。Keycloak 不再支持使用redirect_uri注销。您需要包含post_logout_redirect_uriid_token_hint作为参数。

请检查此问题的答案以获取更多信息。 keycloak:使用 React 用户可以登录,但是当我尝试注销时,我收到一条消息“无效参数:redirect_uri”

  • 如何以及在哪里使用这些“post_logout_redirect_uri”和“id_token_hint”参数? (2认同)
  • 您可以从 Keycloak 领域的 .well-known openid 配置链接获取注销 URL。然后您需要提供 id_token_hint 和 post_logout_redirect_uri 作为 url 参数。id_token_hint =&gt; 在身份验证时为该用户颁发的 id 令牌。post_logout_redirect_url =&gt; 用户成功注销后需要重定向的 url。(此 url 应在客户端设置中作为有效的重定向 URI 提及) (2认同)

小智 8

转到keycloak管理控制台> SpringBootKeycloak> Cients> login-app页面.在valid-redirect uris部分中添加 http:// localhost:8080/sso/login

这将有助于解决间接问题

  • 问题是管理控制台无法访问. (13认同)

小智 7

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


小智 7

我在重定向 URL 中遇到了与“localhost”相同的问题。在客户端配置(KeyCloak Web 管理控制台)的“有效重定向 URI”字段中更改为 127.0.0.1。这个对我有用。


Mar*_*ark 5

修改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. 现在,将您的原始更改 <web-context>yourchange/auth</web-context>放入standalone.xml中,重新启动Keycloak并导航到登录页面(现在是 /yourchange/auth/admin
  9. 登录并享受

  • 或者,您可以编辑数据库中的表“redirect_uris”并调整值字段 (2认同)

aCi*_*CiD 5

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


wor*_*shi 5

如果您在领域名称中添加空格,似乎可能会出现此问题。我已将名称设置为Debugging Realm,但收到此错误。当我改变DebuggingRealm它的工作。

显示名称中仍然可以有空格。奇怪的是 keycloak 不会在管理员输入中检查这一点。


小智 5

也遇到了这个问题。经过两天的绞尽脑汁,我发现 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
Run Code Online (Sandbox Code Playgroud)


小智 5

在您的客户端中,设置请求的来源。就我而言,localhost:3000(javaScript 客户端)

在此输入图像描述


boy*_*od3 3

您需要检查 keycloak 管理控制台的前端配置。重定向 url 和 Web 来源的配置一定是错误的。