Keycloak 不发送 cookie

问题描述 投票:0回答:1

我们在 Hetzner ubuntu 服务器上使用 keycloak 作为容器(连接到同一服务器上的另一个 mysql 容器)。我们有两个阶段——开发和分期。它们的不同之处在于,staging 有 nginx 负载均衡器并使用 HTTPS,而开发没有负载均衡器且仅使用 HTTP。

这是我用于开发的 Dockerfile:

FROM quay.io/keycloak/keycloak:21.0.0 as builder

ENV KC_DB=mysql

ADD ./themes/tediro /opt/keycloak/themes/tediro

RUN /opt/keycloak/bin/kc.sh build

FROM quay.io/keycloak/keycloak:21.0.0
COPY --from=builder /opt/keycloak/ /opt/keycloak/

ENV KC_HOSTNAME_STRICT=false
ENV KC_HOSTNAME_STRICT_HTTPS=false
ENV KC_HTTP_ENABLED=true
ENV KC_HOSTNAME=auth.d-tms.tediro.com
ENV KC_LOGLEVEL=ALL
ENV KC_DB=mysql
ENV KC_DB_URL=jdbc:mysql://mysql:3306/keycloak
ENV KC_DB_USERNAME=keycloak
ENV KC_DB_PASSWORD=xxx
ENV KC_ADMIN=admin
ENV KC_ADMIN_PASSWORD=xxx
ENV KC_FEATURES=admin-fine-grained-authz
ENV KC_CACHE=local

ENV PROXY_ADDRESS_FORWARDING=false

ENV JDBC_PARAMS="useSSL=false&allowPublicKeyRetrieval=true&connectTimeout=50000"
ENV JAVA_TOOLS_OPTIONS="-Djboss.as.management.blocking.timeout=30000"
ENV JAVA_OPTIONS="-Djboss.as.management.blocking.timeout=6000"

ENTRYPOINT ["/opt/keycloak/bin/kc.sh", "start-dev"]

这是为了舞台:

FROM quay.io/keycloak/keycloak:21.0.0 as builder

ENV KC_DB=mysql

ADD ./themes/tediro /opt/keycloak/themes/tediro

RUN /opt/keycloak/bin/kc.sh build

FROM quay.io/keycloak/keycloak:21.0.0
COPY --from=builder /opt/keycloak/ /opt/keycloak/

ENV KC_HOSTNAME_STRICT=false
ENV KC_HOSTNAME_STRICT_HTTPS=true
ENV KC_HTTP_ENABLED=false
ENV KC_HOSTNAME=auth.s-tms.tediro.com
ENV KC_LOGLEVEL=ALL
ENV KC_DB=mysql
ENV KC_DB_URL=jdbc:mysql://mysql:3306/keycloak
ENV KC_DB_USERNAME=keycloak
ENV KC_DB_PASSWORD=xxx
ENV KC_ADMIN=admin
ENV KC_ADMIN_PASSWORD=xxx
ENV KC_FEATURES=admin-fine-grained-authz
ENV KC_CACHE=local
ENV KC_PROXY=edge

ENV PROXY_ADDRESS_FORWARDING=true

ENV JDBC_PARAMS="useSSL=true&allowPublicKeyRetrieval=true&connectTimeout=50000"
ENV JAVA_TOOLS_OPTIONS="-Djboss.as.management.blocking.timeout=30000"
ENV JAVA_OPTIONS="-Djboss.as.management.blocking.timeout=6000"

ENTRYPOINT ["/opt/keycloak/bin/kc.sh", "start"]

虽然分期工作正常,但我们在开发方面遇到了问题。

在应用程序代码中,我们使用 keycloak-js 并调用

keycloak.login()
打开 keycloak 托管的登录页面。此页面设置 2 个 cookie: AUTH_SESSION_ID_LEGACY 和 KC_RESTART 。单击登录按钮后,这些 cookie 应该被发送(至少在登台时发生),但它们不会在开发时发送。这会导致
Cookie not found. Please make sure cookies are enabled in your browser. 
错误。

问题与浏览器设置无关,因为它在任何地方、每个人身上都会发生。 Cookies Secure / SameSite 选项似乎是正确的。

keycloak 不发送 cookie 的原因可能是什么?

尝试使用 keycloak dockerfile 中的所有选项。

javascript docker keycloak
1个回答
0
投票

要使 cookie 发挥作用,您必须使用 HTTPS,即使是在本地也是如此。由于同一站点问题,HTTP 将阻止 OpenID-Connect 涉及的许多 cookie。

我在这篇博文中写了有关如何检测和诊断 cookie 问题的博客:https://nestenius.se/2023/10/09/debugging-cookie-problems/

© www.soinside.com 2019 - 2024. All rights reserved.