Spring KeyCloak在Docker容器中始终接收401

mspsb9vt  于 2023-05-05  发布在  Spring
关注(0)|答案(1)|浏览(155)

我面临一个问题,当我将Sping Boot 应用程序放入Docker容器时,当使用有效的JWT访问安全端点时,我总是收到401状态代码。
当Sping Boot 应用程序正常运行时(不在Docker容器中),一切正常。
在应用程序日志中找不到任何有用的内容。
下面是application-docker.yaml的一部分:

security:
  oauth2:
    resourceserver:
      jwt:
        issuer-uri: http://${KEYCLOAK_URL}:8080/realms/polsl-course-api

下面是docker-compose.yaml:

keycloak:
  container_name: 'keycloak'
  hostname: keycloak
  image: quay.io/keycloak/keycloak:latest
  environment:
    DB_VENDOR: POSTGRES
    DB_ADDR: keycloak-postgres
    DB_DATABASE: keycloak
    DB_USER: root
    DB_SCHEMA: public
    DB_PASSWORD: root
    KEYCLOAK_ADMIN: admin
    KEYCLOAK_ADMIN_PASSWORD: admin
  ports:
    - '8000:8080'
  depends_on:
    - keycloak-postgres
  command:
    - start-dev

schedule-service:
  container_name: schedule-service
  build:
    context: schedule-service
    dockerfile: Dockerfile
  environment:
    SPRING_PROFILES_ACTIVE: docker
    RABBITMQ_PASSWORD: password
    RABBITMQ_USERNAME: user
    RABBITMQ_HOST: rabbitmq
    EUREKA_NAME: discovery-server
    EUREKA_PORT: 8761
    POSTGRES_URL: schedule-service-postgres
    POSTGRES_USERNAME: root
    POSTGRES_PASSWORD: root
    KEYCLOAK_URL: keycloak
  ports:
    - '8089:8089'
  depends_on:
    - rabbitmq
    - schedule-service-postgres
    - keycloak

什么原因会导致这样的问题?

dgtucam1

dgtucam11#

Spring配置中security.oauth2.resourceserver.jwt.issuer-uri的值必须精确匹配access tokens中iss声明的值(scheme和尾随斜杠,如果有的话,很重要)。
您可以在Keycloak配置中定义hostname属性。这将影响所有令牌的颁发者URI中的主机名。
如果不能从issuer-uri中猜到jwk-set-uri,您也可以在属性中定义jwk-set-uri(例如,当无法从您的资源服务器网络解析/访问颁发者URI的主机时)

相关问题