问题是,我在 localhost 上运行的服务访问了在 Docker 中运行的 keycloak,并且在生成访问令牌时,在接收令牌和通过 jwt 解密令牌时,诸如 Issuer-uri 之类的参数在 aplication.yml 中注册为 localhost。 io 有一个“iss”属性:它是“http://localhost:8080/auth/realms/task-realm”,好吧,这也在本地主机上。将带有服务的容器上传到 Docker 后,使用以下设置:
resource-server:
jwt:
issuer-uri: http://keycloak:8080/auth/realms/task-realm
jwk-set-uri: http://keycloak:8080/auth/realms/task-realm/protocol/openid-connect/certs
当我尝试到达安全端点时,我开始收到 401 错误,日志中包含以下内容
Securing GET /api/v1/company
2024-09-21T20:44:18.915158897Z 2024-09-21T20:44:18.914Z DEBUG 1 --- [companies-service] [nio-8084-exec-7] o.s.s.oauth2.jwt.JwtClaimValidator : The iss claim is not valid
2024-09-21T20:44:18.915212584Z 2024-09-21T20:44:18.915Z DEBUG 1 --- [companies-service] [nio-8084-exec-7] o.s.s.o.s.r.a.JwtAuthenticationProvider : Failed to authenticate since the JWT was invalid
嗯,就是日志显示问题正是在这个领域。我决定再次解密这个令牌,在 iss 字段中仍然有相同的“http://localhost:8080/auth/realms/task-realm”,据我了解,当将服务传输到 Docker 时,它仍然保持不变,但现在它需要不是由 localhost 接收,而是由 keycloak 容器的名称接收,所以问题是,有人知道如何解决这个问题吗?
一般来说,我是这样解决的:我进入“常规”选项卡上的keycloak admin(领域设置)中的领域设置,我需要找到“前端URL”字段,并输入“http://keycloak:8080/auth “ 那里