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

本地Flask-OIDC+Keycloak环境HTTPS重定向问题及回调疑问

本地HTTP环境下Flask-OIDC与Keycloak的重定向问题

环境概述

本地开发环境所有服务均部署在localhost:使用Flask-OIDC 2.0.3搭配Docker部署的Keycloak 22.0.3,Flask应用运行在8080端口,Keycloak在9080端口,React UI在9001端口,所有服务均使用HTTP而非HTTPS。

Keycloak Docker Compose配置

version: '3.8'
name: keycloak
services:
  keycloak:
    image: quay.io/keycloak/keycloak:22.0.3
    command: ['start-dev --import-realm']
    volumes:
      - ./realm-config:/opt/keycloak/data/import
    environment:
      - KC_DB=dev-file
      - KEYCLOAK_ADMIN=admin
      - KEYCLOAK_ADMIN_PASSWORD=admin
      - KC_FEATURES=scripts
      - KC_HTTP_PORT=9080
      - KC_HEALTH_ENABLED=true
      - KC_HTTPS_REQUIRED=false
    # If you want to expose these ports outside your dev PC,
    # remove the "127.0.0.1:" prefix
    ports:
      - 127.0.0.1:9080:9080
      - 127.0.0.1:9443:9443

client_secrets.json配置

{
  "web": {
    "client_id": "<client>",
    "client_secret": "<secret>",
    "auth_uri": "http://127.0.0.1:9080/realms/jhipster/protocol/openid-connect/auth",
    "token_uri": "http://127.0.0.1:9080/realms/jhipster/protocol/openid-connect/token",
    "issuer": "http://127.0.0.1:9080/realms/jhipster",
    "userinfo_uri": "http://127.0.0.1:9080/realms/jhipster/protocol/openid-connect/userinfo",
    "token_introspection_uri": "http://127.0.0.1:9080/realms/jhipster/protocol/openid-connect/token/introspect"
  }
}

Flask应用配置

OIDC_CLIENT_SECRETS = "src/main/python/config/client_secrets.json"
OIDC_REDIRECT_URI = "http://127.0.0.1:8080/oidc_callback"

Keycloak客户端配置

客户端配置包含重定向URI等相关设置(原配置截图显示对应参数)

问题现象

点击UI的登录链接时,会跳转到Keycloak的登录页面,但发现redirect_uri被自动改为HTTPS,继续登录会出现“Secure Connection Failed”错误。

已尝试方案

  • 在Keycloak客户端的redirect_uri列表中移除HTTPS地址,此时Keycloak登录页提示“Invalid redirect_uri”;
  • 手动修改浏览器地址栏的URL为HTTP后登录,出现“invalid_grant: Incorrect redirect_uri”错误。

咨询问题

  1. 整套环境均为本地HTTP部署,HTTPS重定向的来源是什么?如何阻止该行为?
  2. 是否需要手动实现/oidc_callback接口?我认为Flask-OIDC会自动处理该回调。

问题解答

问题1:HTTPS重定向的来源与解决方法

HTTPS重定向主要来自三个核心环节:

  1. Keycloak Realm级别的强制HTTPS设置
    即使容器环境变量设置了KC_HTTPS_REQUIRED=false,Realm自身可能仍强制要求HTTPS。进入Keycloak后台,找到jhipster Realm,在Realm Settings -> Security Defenses -> HTTPS Required选项,设置为None(而非All Requests)。

  2. Flask-OIDC的URL自动推断逻辑
    Flask-OIDC会根据请求头或全局配置自动切换协议。需在Flask配置中明确指定HTTP相关参数:

    PREFERRED_URL_SCHEME = 'http'
    OIDC_ID_TOKEN_COOKIE_SECURE = False
    OIDC_REFRESH_TOKEN_COOKIE_SECURE = False
    

    同时确保Keycloak客户端的Valid Redirect URIs和Web Origins都配置为HTTP地址,比如http://127.0.0.1:8080/*。

  3. Keycloak客户端的基础URL配置
    检查客户端的Root URL和Base URL,确保均使用HTTP协议;如果Access Type为confidential,需确认没有强制HTTPS的隐含设置。

问题2:是否需要手动实现/oidc_callback接口

不需要手动实现。Flask-OIDC会自动注册/oidc_callback路由,处理授权码接收、令牌交换等完整回调流程。只需保证OIDC_REDIRECT_URI配置正确,且Keycloak客户端的Valid Redirect URIs包含该HTTP地址即可。

若仍出现回调错误,建议查看Flask应用日志,确认回调请求是否被正确接收,或检查client_secret是否与Keycloak客户端配置匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 08:26:35