【问题标题】:Keycloak behind reverse proxy反向代理背后的密钥斗篷
【发布时间】:2019-01-15 00:14:46
【问题描述】:

我在服务器上安装了独立的 keycloak,并尝试通过 nginx 在反向代理后面使用它。 Keycloak 绑定到 127.0.0.1

这是我的 nginx 虚拟主机配置:

server {
server_name auth.dp.net;
location /auth {
    proxy_pass  http://localhost:8080;
    proxy_http_version 1.1;

        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;
}
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/auth.dp.net/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/auth.dp.net/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}

server {
if ($host = auth.dp.net) {
    return 301 https://$host$request_uri;
} # managed by Certbot
listen 80;
server_name auth.dp.net;
return 404; # managed by Certbot
}

但是当我访问 https://auth.dp.net/auth 时,我得到以下 keycloak 错误:

Invalid parameter: redirect_uri

我的配置中缺少什么?

【问题讨论】:

    标签: nginx reverse-proxy keycloak


    【解决方案1】:

    一个或两个/,也许还有一个=

    location /auth {
        proxy_pass  http://localhost:8080;
    

    如果您的代理通行证指令是裸露的,即没有指定路径(如上所述),那么整个请求路径将附加到代理通行证 url。

    因此,您上面的配置将导致对https://auth.dp.net/auth 的请求被代理到http://localhost:8080/auth/

    如果您添加任何内容,即使只是在您的代理传递指令中添加一个斜线,那么您添加的任何内容都将替换您的位置指令的匹配部分。因此,要将请求传递给没有路径的代理,您需要添加一个斜杠。所以这可能有效:

    location /auth {
        proxy_pass  http://localhost:8080/;
    

    但是,由于 Nginx 喜欢在代理时添加尾部斜杠,如果请求 url 没有它可能不起作用。因此,您可以通过将 location 指令更改为来告诉 Nginx 完全匹配:

    location = /auth {
    

    或者您预计它将重写您的请求并将其更改为:

    location /auth/ {
    

    或者,如果您真的想成为专业人士,您可以创建两个相同的块。一个是= /auth,另一个是/auth/

    这是因为:

    • 如果您使用= /auth,则请求https://auth.dp.net/auth/ 将不匹配,因此不会被代理。
    • 如果您使用/auth/,它将同时适用于https://auth.dp.net/authhttps://auth.dp.net/auth/,但前者会在Nginx 中触发内部重写以添加/,从而有效地将您的服务器负载加倍以处理身份验证请求。

    【讨论】:

      【解决方案2】:

      转到您的 Keycloak 客户端的设置并将有效重定向 Uri 更改为 *。

      有效的重定向 Uri 是 Keycloak 的一种安全机制,可限制重定向可能发生的位置。在生产中,它应该尽可能准确以确保安全连接。

      【讨论】:

        猜你喜欢
        • 2021-06-12
        • 2021-10-30
        • 2021-08-02
        • 1970-01-01
        • 2018-07-08
        • 2023-02-10
        • 2016-11-15
        • 2023-01-13
        • 2018-11-13
        相关资源
        最近更新 更多