首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >反向代理背后的Keycloak混合了内部和外部地址。

反向代理背后的Keycloak混合了内部和外部地址。
EN

Stack Overflow用户
提问于 2021-02-12 17:23:02
回答 2查看 1.4K关注 0票数 1

我正试图用nginx在反向代理后面设置一个keycloak实例,我几乎做到了。

我的(部分)码头-组成:

代码语言:javascript
复制
version: '3.4'                                                                          
                                                                                    
services:  
  [...]
                                                                                                                                                                                                                                                 
  keycloak:                                                                             
    image: jboss/keycloak                                                                                                                                     
    environment:                                                                        
      - DB_VENDOR=[vendor]
      - DB_USER=[user]                                                                      
      - DB_PASSWORD=[password]
      - DB_ADDR=[dbaddr]
      - DB_DATABASE=[dbname]
      - KEYCLOAK_USER=[adminuser]                                                         
      - KEYCLOAK_PASSWORD=[adminpassword]                                                       
      - KEYCLOAK_IMPORT=/tmp/my-realm.json                                           
      - KEYCLOAK_FRONTEND_URL=https://auth.mydomain.blah/auth                          
      - PROXY_ADDRESS_FORWARDING=true                                                   
      - REDIRECT_SOCKET=proxy-https
                                                 
  [...]

我的nginx公司

代码语言:javascript
复制
server {
    listen       443 ssl;
    server_name  auth.mydomain.blah;
  
    ssl_certificate /etc/letsencrypt/live/auth.mydomain.blah/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/auth.mydomain.blah/privkey.pem;

    location / {
        proxy_pass http://keycloak:8080;
    }
}

它起作用了,我可以从https://auth.mydomain.blah/auth 访问密钥披风,但是当我看https://auth.mydomain.blah/auth/realms/campi/.well-known/openid-configuration时,我得到了以下信息:

代码语言:javascript
复制
{
  "issuer": "https://auth.mydomain.blah/auth/realms/campi",
  "authorization_endpoint": "https://auth.mydomain.blah/auth/realms/campi/protocol/openid-connect/auth",
  "token_endpoint": "http://keycloak:8080/auth/realms/campi/protocol/openid-connect/token",
  "introspection_endpoint": "http://keycloak:8080/auth/realms/campi/protocol/openid-connect/token/introspect",
  "userinfo_endpoint": "http://keycloak:8080/auth/realms/campi/protocol/openid-connect/userinfo",
  "end_session_endpoint": "https://auth.mydomain.blah/auth/realms/campi/protocol/openid-connect/logout",
  "jwks_uri": "http://keycloak:8080/auth/realms/campi/protocol/openid-connect/certs",
  "check_session_iframe": "https://auth.mydomain.blah/auth/realms/campi/protocol/openid-connect/login-status-iframe.html",
  [...]

为什么钥匙斗篷要混合内部和外部uris?我遗漏了什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-02-13 13:23:49

https://www.keycloak.org/docs/latest/server_installation/index.html#_setting-up-a-load-balancer-or-proxy

您的反向代理/nginx没有正确地转发主机头,因此Keycloak不知道请求使用了哪个主机/协议,并且使用了后端/内部主机名。您需要设置几行proxy_set_header

代码语言:javascript
复制
server {
    listen       443 ssl;
    server_name  auth.mydomain.blah;
  
    ssl_certificate /etc/letsencrypt/live/auth.mydomain.blah/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/auth.mydomain.blah/privkey.pem;

    location / {
            proxy_pass          http://keycloak:8080;
            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-Host   $host;
            proxy_set_header    X-Forwarded-Server $host;
            proxy_set_header    X-Forwarded-Port   $server_port;
            proxy_set_header    X-Forwarded-Proto  $scheme;
    }
}
票数 3
EN

Stack Overflow用户

发布于 2021-02-12 20:43:22

我们公司也有同样的“问题”。

在内部,可以通过keycloak-admin.instdomain.com访问它,但对于我们的正常用户来说,它们可以在外部访问keycloak.externaldomain.com。

如果我在内部加载.著名的/openid-配置url,它有内部地址,但是使用外部url加载它,它有这个地址。

它没有给我们造成任何问题,只是偶尔向看到差别的工程师解释一下。否则就没问题了。

它似乎密钥斗篷只使用任何领域,它被访问。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66176321

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档