You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Keycloak集成Microsoft Entra ID SAML SSO重定向后Cookie丢失问题求助

问题分析与解决方案

从错误日志和配置来看,核心问题是Keycloak在处理Microsoft Entra ID的SAML回调时,认为当前处于非安全HTTP上下文,导致生成的会话Cookie未标记为Secure,浏览器在跨域POST回调时不发送该Cookie,最终触发"Cookie not found"错误。

解决方案

1. 修正Keycloak环境变量配置

调整主机名、Cookie安全属性相关配置,确保Keycloak正确识别HTTPS环境:

KC_TRANSACTION_XA_ENABLED=true
KC_LOG=console,file
KC_LOG_LEVEL=all
KC_DB_SCHEMA=keycloak_db
KC_HEALTH_ENABLED=true
KC_METRICS_ENABLED=true
KC_LOG_CONSOLE_COLOR=true
KC_LOG_CONSOLE_FORMAT=%d{yyyy-MM-dd HH:mm:ss,SSS} %-5p [%c] (%t) %s%e%n
KC_LOG_FILE=data/log/keycloak.log
KC_LOG_FILE_LEVEL=debug
KC_LOG_CONSOLE_OUTPUT=json
KC_PROXY=edge
PROXY_ADDRESS_FORWARDING=true
# 修正KC_HOSTNAME为纯主机名(不要带https://前缀)
KC_HOSTNAME=idp.keycloak.eu
KC_HOSTNAME_STRICT_HTTPS=true
KC_HOSTNAME_STRICT=true
# 强制Cookie为Secure,允许跨域POST携带Cookie
KC_COOKIE_SECURE=true
KC_COOKIE_SAME_SITE=None
KEYCLOAK_FRONTEND_URL=https://idp.keycloak.eu

2. 增强Nginx Ingress的头部传递

补充Ingress注解,确保Keycloak能正确识别客户端的真实请求协议与主机:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: nginx-ingress-dev
  annotations:
    kubernetes.io/ingress.class: "nginx"
    kubernetes.io/ingress.allow-http: "false"
    nginx.ingress.kubernetes.io/backend-protocol: "http"
    nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
    nginx.ingress.kubernetes.io/ssl-redirect: "true"
    nginx.ingress.kubernetes.io/x-forwarded-proto: "https"
    # 添加以下头部传递配置
    nginx.ingress.kubernetes.io/use-forwarded-headers: "true"
    nginx.ingress.kubernetes.io/configuration-snippet: |
      proxy_set_header X-Forwarded-Host $host;
      proxy_set_header X-Forwarded-Port $server_port;
      proxy_set_header X-Forwarded-Proto $scheme;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
spec:
  rules:
    - host: idp.keycloak.eu
      http:
        paths:
          - pathType: Prefix
            path: /
            backend:
              service:
                name: keycloak-service
                port:
                  number: 8080
  tls:
    - hosts:
        - idp.keycloak.eu
      secretName: tls-secret

3. 验证SAML回调配置一致性

确认Microsoft Entra ID中配置的回调URL与Keycloak身份提供商配置完全一致,格式为:
https://idp.keycloak.eu/realms/foo-tenant-id/broker/foo-cli-id/endpoint

4. 清理缓存测试

部署配置变更后,清空浏览器缓存与Cookie,重新发起SSO流程,避免旧Cookie干扰。

配置说明

  • KC_HOSTNAME设置为纯主机名,避免Keycloak生成错误的Cookie域属性;
  • KC_COOKIE_SECURE=true强制所有Cookie标记为Secure,确保仅在HTTPS环境下传输;
  • KC_COOKIE_SAME_SITE=None允许跨域POST请求携带Cookie,适配Microsoft Entra ID的回调机制;
  • Ingress补充的头部确保Keycloak能正确识别客户端的真实请求协议,避免误判为HTTP环境。

内容的提问来源于stack exchange,提问作者HittingMyCode

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 14:18:15