在具有 Keycloak 授权的 Docker 容器内调用 Quarkus 应用程序时获得 401 Unauthorized

Getting 401 Unauthorized when calling Quarkus app inside a Docker container with Keycloak authorization

我有一个客户端应用程序 运行ning on localhost:4200 (angular 应用程序),它从 Quarkus 应用程序(⟩localhost:8082 )获取资源。使用 Keycloak .

完成授权

如果我在我的本地主机上同时启动 Angular 和 Quarkus 应用程序,授权工作正常:

但是,如果我使用我的 Quarkus 应用程序构建 Docker 图像并在 Docker 容器中 运行 它,则它不起作用。 Angular 应用程序仍然 运行 在我的本地主机上,而不是在容器中:

我的 Quarkus application.properties:

quarkus.http.port=8082
quarkus.oidc.auth-server-url=http://${KEYCLOAK_HOST:localhost}:${KEYCLOAK_PORT:8081}/auth/realms/the-realm
quarkus.oidc.client-id=the-api
quarkus.oidc.credentials.secret=secret
quarkus.oidc.authentication.scopes=profile

quarkus.http.cors.origins=http://localhost:4200
quarkus.http.cors.methods=GET,PUT,POST,PATCH,DELETE,OPTIONS
quarkus.http.cors.headers=accept, authorization, content-type, x-requested-with
quarkus.http.cors=true

发生这种情况是因为容器内的 localhost 没有引用我机器的 localhost 吗?所以这个 属性 没有效果: quarkus.http.cors.origins=http://localhost:4200 ?我尝试使用 quarkus.http.cors.origins=http://host.docker.internal:4200 但它没有用..

作为初学者,请多多指教,谢谢!

最终这不是 CORS 问题,如评论中所述(谢谢@sventorben!),解决方案是进入 Keycloak 领域设置并为 [=11= 添加 http://localhost:8081/auth ]:

此处有更多详细信息: