5

我的 Keycloak 服务器部署在反向代理后面的 aws EC2 上,而我的前端客户端(Springbootapp)位于不同的 EC2 上。

现在我收到 Invalid redirect_uri 错误,尽管它在前端客户端位于 localhost 并且 Keycloak 在 aws 上时有效。IE

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 localhost %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 会为查询生成不同的重定向 URI。有人知道如何避免这种情况吗?

本地主机

公共DNS

4

2 回答 2

3

我遇到了同样的问题。我的 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/*

希望有帮助。我花了几个小时才找到它并让它工作。

于 2018-10-05T10:45:48.803 回答
1

查询参数“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

于 2018-07-11T01:47:47.947 回答