首页 文章

keycloak无效参数:redirect_uri

提问于
浏览
17

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

9 回答

  • 1

    对我有用的是添加wildchar '*' . 虽然对于 生产环境 版本,我将更具体地了解该字段的 Value . 但是出于开发目的,你可以做到这一点 .

    enter image description here

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

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

  • 2

    你需要检查keycloak管理控制台的前端配置 . 它必须错误地配置重定向网址和网络来源 .

  • 7

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

    这将有助于解决间接问题

  • 7

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

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

  • 2

    我遇到了同样的错误 . 在我的情况下,问题是 Valid Redirect URIs 不正确 . 所以这些是我遵循的步骤 .

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

    enter image description here

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

    enter image description here

  • 0

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

  • 1

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

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

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

    Step 1) 按照this documentation设置MySql数据库 . 您可能还需要参考the official documentation .

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

    Note: 此时,您应该在技术上能够登录,但是Keycloak 4.0版正在使用https进行重定向uri,即使我们刚刚关闭了https支持 . 在Keycloak修复此问题之前,我们可以使用反向代理解决这个问题 . 无论如何,我们都希望使用反向代理来轻松设置https而无需担心Java密钥库 .

    Step 3) 安装Apache . 我们将使用Apache作为反向代理(我尝试了NGINX,但NGINX限制阻止我使用它) . 请参阅yum installing Apache(CentOs 7)和apt-get install Apache(Ubuntu 16),或查找特定发行版的说明 .

    Step 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 .

    Step 5) 我们将与反向代理 Build SSL连接,然后反向代理将通过http与keyCloak通信 . 因为这种http通信发生在同一台机器上,所以你仍然是安全的 . 我们可以使用Certbot来设置自动续订证书 .

    如果客户端加密不够好,并且您的安全策略需要端到端加密,则必须弄清楚如何setup SSL through WildFly,而不是使用反向代理 .

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

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

    Step 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>
    

    Step 8) 重启Apache . 使用 sudo systemctl restart httpd (CentOs)或 sudo systemctl restart apache2 (Ubuntu) .

    Step 9) 在您有机会尝试登录服务器之前,由于我们告诉Keycloak使用http,我们需要设置另一种安全连接方法 . 这可以通过在keycloak服务器上安装VPN服务或使用SOCKS来完成 . 我使用了SOCKS代理 . 为此,您首先需要设置动态端口转发 .

    ssh -N -D 9905 user@example.com

    或者通过Putty进行设置 .

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

    完成动态端口转发设置后,您需要设置浏览器以在端口9905上使用SOCKS代理 . Instructions here .

    Step 10) 您现在应该可以立即登录该网站了 . 要连接到网站,请转到http://127.0.0.1,SOCKS代理将转到管理控制台 . 确保在're done as it does utilize your server'资源时关闭SOCKS代理,如果继续,将导致网速较慢 .

    Step 11) 不要问我花了多长时间才弄明白这一切 .

  • 1

    如果您在修改Keycloak上下文路径后看到此问题,则需要对重定向网址设置进行其他更改:

    • 在standalone.xml中将 <web-context>yourchange/auth</web-context> 更改回 <web-context>auth</web-context>

    • 重启Keycloak并导航到登录页面( /auth/admin

    • 登录并选择"Master"领域

    • 从侧面菜单中选择"Clients"

    • 从显示的列表中选择"security-admin-console"客户端

    • 将"Valid Redirect URIs"从 /auth/admin/master/console/* 更改为 /yourchange/auth/admin/master/console/*

    • 保存并退出 . 退出后,您将再次看到"Invalid redirect url"消息 .

    • 现在,在standalone.xml中输入原始更改 <web-context>yourchange/auth</web-context> 重新启动Keycloak并导航到登录页面(现在是 /yourchange/auth/admin

    • 登录并享受

  • 2

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

相关问题