keycloak无效参数:redirect_uri

keycloak Invalid parameter: redirect_uri

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


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

enter image description here

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

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


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

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

enter image description here

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

enter image description here


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

在您重定向到的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选项。完成后,您的配置文件应如下所示。

    好。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    <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 [email protected]

    好。

    或通过腻子进行设置。

    好。

    现在,所有发送到端口9905的流量都将通过SSH隧道安全地路由到您的服务器。确保将服务器防火墙上的端口9905列入白名单。

    好。

    一旦进行了动态端口转发设置,就需要将浏览器设置为在端口9905上使用SOCKS代理。此处的说明。

    好。

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

    好。

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

    好。

    好。


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

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


    修改Keycloak上下文路径后,如果发现此问题,则需要对重定向URL设置进行其他更改:

  • yourchange/auth更改回
    standalone.xml中的auth
  • 重新启动Keycloak并导航到登录页面(/auth/admin)
  • 登录并选择"主"领域
  • 从侧面菜单中选择"客户"
  • 从出现的列表中选择" security-admin-console"客户端
  • 将"有效重定向URI"从/auth/admin/master/console/*更改为
    /yourchange/auth/admin/master/console/*
  • 保存并退出。退出后,您会再次看到"无效的重定向网址"消息。
  • 现在,输入您的原始更改
    standalone.xml中的yourchange/auth
    重新启动Keycloak并导航到登录页面(现在是
    /yourchange/auth/admin)
  • 登录并享受

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

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


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


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


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


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


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