keycloak无效参数:redirect_uri


82

当我尝试从我的api击中来自keycloak的用户身份,但是它给我错误信息:Invalid parameter:keycloak页面上的redirect_uri。除了主人,我已经建立了自己的境界。keycloak在http上运行。请帮我。


通过检查元素检查时显示500错误
VIJAY THAKUR

2
请不要多次发布相同的问题。如果您想在原始问题中添加更多详细信息,可以通过单击问题正下方的“编辑”来完成。
THelper


1
检查重定向网址中的https vs http
ThomasRS

1
就我而言,这是一个愚蠢的错误:“ <IP地址>”而不是“ http:// <IP地址>”
SwissNavy

Answers:


53

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

在此处输入图片说明

keycloak管理控制台-> Realm_Name-> Cients-> Client_Name下可用的设置。

编辑:请勿在生产中进行此操作。这样做会造成很大的安全漏洞。


13
该答案可能是一个危险的安全漏洞,这样做会打开不安全的重定向攻击的大门。
Michael Courcy

我不敢相信这个答案目前获得最高票。这远非解决方案,它实际上只能出现在注释中。另一方面,问题中的信息太少,甚至无法回答。
bsaverino

35

如果您是.Net开发者,请检查以下配置keycloakAuthentication选项类设置Call​​backPath = RedirectUri,//此属性需要进行其他设置,否则将显示无效的redirecturi错误

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

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

在此处输入图片说明

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

在此处输入图片说明


18

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

在您重定向到的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>

步骤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)不要问我花了多长时间才能弄清所有这些。


1
这是引起我注意的一行:#将https redirect_uri参数更改为http RewriteCond%{request_uri} \?%{query_string} ^(。*)redirect_uri = https(。*)$ RewriteRule。%1redirect_uri = http%2 [NE,R = 302]我正在使用nginx,但是,一旦我将https替换为redirect_uri上的http,它就会起作用。
Telmo Dias


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. 登录并享受

1
或者,您可以redirect_uris在数据库中编辑表并调整值字段
pHiL

4

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

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


2

我在以下Spring Boot和Keycloak示例(位于http://www.baeldung.com/spring-boot-keycloak)上时遇到了Invalid parameter:redirect_uri问题问题。从keycloak服务器添加客户端时,我们必须为该客户端提供重定向URI,以便keycloak服务器可以执行重定向。当我多次遇到相同的错误时,我接着从keycloak服务器控制台复制了正确的URL,并在有效的Redirect URIs空间中提供了它,效果很好!


2

甚至我也面临同样的问题。我通过分别转到领域中的特定客户端(在您的完整URL之后重定向URL add *)来纠正它。

该问题将得到解决

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



1

您需要检查keycloak管理控制台以进行前端配置。必须为重定向URL和Web来源错误地配置它。


1

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


1

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


1

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


1

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


使用此解决方案对其进行修复。
桑迪B

0

您的代码(keycloak.init)中的重定向URI应该与在Keycloak服务器(客户端->有效Uri)上设置的重定向URI相同。 点击查看我的代码图片 单击以查看我的密钥斗篷设置


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上对此的讨论


0

如果将空白放在Realm名称中,则似乎会出现此问题。我将名称设置为Debugging Realm,但出现此错误。当我改变DebuggingRealm它的作品。

您仍然可以在显示名称中包含空格。奇怪的是,keycloak不会在管理员输入中对此进行检查。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.