本地Flask-OIDC+Keycloak环境HTTPS重定向问题及回调疑问
环境概述
本地开发环境所有服务均部署在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”错误。
咨询问题
- 整套环境均为本地HTTP部署,HTTPS重定向的来源是什么?如何阻止该行为?
- 是否需要手动实现
/oidc_callback接口?我认为Flask-OIDC会自动处理该回调。
问题解答
问题1:HTTPS重定向的来源与解决方法
HTTPS重定向主要来自三个核心环节:
Keycloak Realm级别的强制HTTPS设置
即使容器环境变量设置了KC_HTTPS_REQUIRED=false,Realm自身可能仍强制要求HTTPS。进入Keycloak后台,找到jhipsterRealm,在Realm Settings -> Security Defenses -> HTTPS Required选项,设置为None(而非All Requests)。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/*。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

