我已经将Keycloak服务器部署在反向代理后面的AWS EC2上,而前端客户端(Springbootapp)则位于另一个EC2上。
现在,我收到无效的redirect_uri错误,尽管当前端客户端位于localhost且AWS上的Keycloak起作用时,该错误仍然有效。即
可以在以下位置访问密钥斗篷:http://api.my-kc.site/
Valid Redirect URIs: http://localhost:8012/* and /login/*
工作
查询:https://api.my-kc.site/auth/realms/WebApps/protocol/openid-connect/auth?response_type=code&client_id=product-app&redirect_uri=http%3A%2F%2F 本地主机%3A 8012 %2Fsso%2Flogin&state = 53185486-ef52-44a7-8304-ac4cfeb575ee&login = true&scope = openid
Valid Redirect URIs: http://awspublicip:80/* and /login/*
不起作用
我还尝试了不指定端口的建议,即http://awspublicip/ *;但这仍然行不通:/
查询:https://api.my-kc.site/auth/realms/WebApps/protocol/openid-connect/auth?response_type=code&client_id=product-app&redirect_uri=https%3A%2F%2F awspublicip %3A 0 %2Fsso%2Flogin&state = 8bbb01e7-ad4d-4ee1-83fa-efb7f05397cc&login = true&scope = openid
有人有想法吗?我一直在查看所有Invalid redirect_uri帖子,但似乎没有任何结果。
当请求的发起者不是localhost时,Keycloack似乎为查询生成了不同的重定向URis。有人知道如何避免这种情况吗?
答案 0 :(得分:0)
查询参数“ redirect_url”似乎与有效的重定向URI设置不匹配。
redirect_url: https%3A%2F%2Fawspublicip%3A0%2Fsso%2Flogin <- It's https
Valid Redirect URIs: http://awspublicip:80/* <- But it's http
答案 1 :(得分:0)
我遇到了同样的问题。我的Spring Boot应用程序位于nginx的后面。我更新了nginx来传递x-forwarded头文件,并使用
spring boot yaml配置:
server:
use-forward-headers: true
keycloak:
realm: myrealm
public-client: true
resource: myclient
auth-server-url: https://sso.example.com:443/auth
ssl-required: external
confidential-port: 443
nginx配置:
upstream app {
server 1.2.3.4:8042 max_fails=1 fail_timeout=60s;
server 1.2.3.5:8042 max_fails=1 fail_timeout=60s;
}
server {
listen 443;
server_name www.example.com;
...
location / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Port 443;
proxy_next_upstream error timeout invalid_header http_500;
proxy_connect_timeout 2;
proxy_pass http://app;
}
}
使它对我有用的特定更改是添加keycloak.confidential-port
。添加完之后,它将不再在redirect_uri中添加端口0。
我在Keycloak> Cofigure> Realm> Clients> my-client中唯一设置的是Valid Redirect URIs
设置为:https://www.example.com/*
希望有帮助。我花了几个小时才能找到答案并使其正常工作。