客户端不在本地主机上时,无效的redirect_uri Keycloak

时间:2018-07-11 00:58:01

标签: amazon-ec2 keycloak jwilder-nginx-proxy

我已经将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。有人知道如何避免这种情况吗?

localhost

public dns

2 个答案:

答案 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/*

希望有帮助。我花了几个小时才能找到答案并使其正常工作。