我面临一个问题,当我将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
什么原因会导致这样的问题?
1条答案
按热度按时间dgtucam11#
Spring配置中
security.oauth2.resourceserver.jwt.issuer-uri
的值必须精确匹配access tokens中iss
声明的值(scheme和尾随斜杠,如果有的话,很重要)。您可以在Keycloak配置中定义
hostname
属性。这将影响所有令牌的颁发者URI中的主机名。如果不能从
issuer-uri
中猜到jwk-set-uri
,您也可以在属性中定义jwk-set-uri
(例如,当无法从您的资源服务器网络解析/访问颁发者URI的主机时)