【问题标题】:invalid redirect_uri Keycloak when client is not on localhost当客户端不在本地主机上时,redirect_uri Keycloak 无效
【发布时间】:2018-12-18 22:09:33
【问题描述】:

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

现在我收到 Invalid redirect_uri 错误,尽管它在前端客户端位于 localhost 且 Keycloak 位于 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%2Flocalhost%3A8012%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%2Fawspublicip%3A0%2Fsso%2Flogin&state=8bbb01e7-ad4d-4ee1-83fa-efb7f05397cc&login=true&scope=openid

有人有想法吗?我一直在查看所有 Invalid redirect_uri 帖子,但似乎没有任何结果。

当请求的发起者不是 localhost 时,似乎 Keycloack 会为查询生成不同的重定向 URI。有人知道如何避免这种情况吗?

localhost

public dns

【问题讨论】:

  • does not work 是什么意思?看看 keycloak 日志,你有什么显示的吗?
  • 08:37:31,385 WARN [org.keycloak.events](默认任务 7) type=LOGIN_ERROR, realmId=WebApps, clientId=product-app, userId=null, ipAddress=84.59.129.188 , error=invalid_redirect_uri, redirect_uri=api.my-kc-webapp.site:0/sso/login
  • 您似乎没有正确设置 KC 以使用反向代理。您是否按照这些步骤进行操作?
  • 谢谢!我会再次检查我的配置
  • @IndranilAriunbold 你知道了吗?我有同样的问题。你注意到了吗,redirect_uri 里面有端口 0。 "invalid_redirect_uri, redirect_uri=api.my-kc-webapp.site:0/"

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


【解决方案1】:

我遇到了同样的问题。我的 Spring Boot 应用程序位于 nginx 后面。我更新了 nginx 以通过 x-forwarded 标头并使用

更新了 Spring Boot 配置

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-06-06
    • 1970-01-01
    • 2018-01-03
    • 1970-01-01
    • 2019-11-22
    • 1970-01-01
    • 2017-02-09
    • 2014-05-29
    相关资源
    最近更新 更多