从Docker容器中的java应用程序重定向至keyCloak

093gszye  于 2022-12-29  发布在  Docker
关注(0)|答案(1)|浏览(117)

我有以下环境:

  • 后端带有Sping Boot 应用程序的Docker容器
  • 具有用于认证的密钥罩的码头集装箱
  • 两个集装箱在同一个定制码头桥网络中
  • 主机上的前端应用程序

因此,后端应用程序具有env KEYCLOAK_URL,它用于两个应用程序(前端和后端),并且此URL在主机(浏览器中)上不可用,因为URL具有码头桥内部IP
当用户访问前端应用程序时,前端应用程序向后端发出getUser请求,并返回keyCloak auth URL,以便从env KEYCLOAK_URL登录,但无法从浏览器访问此URL
有人有经验或建议如何解决这个问题吗?
docker-compose.yml

version: '3.7'

networks:
  net:
    driver: bridge
    external: false
    name: test-net

services:
  postgres-db:
    image: postgres:13.1
    container_name: postgres-db
    networks:
      - net
    ports:
      - 5432:5432
    volumes:
      - ./init-postgresql.sql:/docker-entrypoint-initdb.d/1-init.sql:ro
      - ./postgres-data:/var/lib/postgresql/data:rw
    environment:
      LC_ALL: 'C.UTF-8'
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: postgres
      POSTGRES_HOST: postgres-db
      POSTGRES_DB: postgres
      PGDATA: /var/lib/postgresql/data
    restart: unless-stopped

  keycloak:
    image: quay.io/keycloak/keycloak:11.0.2
    container_name: keycloak
    hostname: keycloak
    command: -Dkeycloak.profile.feature.upload_scripts=enabled
    networks:
      - net
    ports:
      - 8180:8080
    environment:
      KEYCLOAK_USER: admin
      KEYCLOAK_PASSWORD: admin
      DB_VENDOR: POSTGRES
      DB_ADDR: postgres-db
      DB_USER: postgres
      DB_PASSWORD: postgres
      DB_DATABASE: keycloak
      DB_SCHEMA: public
    depends_on:
      - postgres-db
    restart: unless-stopped
    
  app:
    image: app
    container_name: app
    depends_on:
      - keycloak
    networks:
      - net
    ports:
      - 8083:8083

    environment:
        KEYCLOAK_URL: http://keycloak:8080/auth
    restart: unless-stopped

我尝试了另一个选项,将spring Boot 应用程序传输到Docker主机网络并将KEYCLOAK_URL更改为localhost:8180,但Windows Docker Desktop不支持主机联网

aiazj4mn

aiazj4mn1#

有两个选项
1:将keycloak url设置为公共,并使用keycloak内部登录表单和登录流
2:在前端构建自己的登录表单,并将后端与keycloak rest API连接,用于登录、令牌、角色等。

相关问题