这是我的开发设置。所有主机引用都是localhost。
我正在使用Flask-OIDC 2.0.3沿着Keycloak 22.0.3(在Docker上作为服务运行)。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客户端配置如下
当我点击我的UI的登录URL时,它会把我带到我创建的新领域的Keycloak登录页面。但是我看到redirect_uri
已经改为https。
如果我继续登录,我会得到一个错误安全连接失败
我试过以下方法
- 从客户端的Keycloak中的redirect_uri列表中删除https
- 然后我在Keycloak登录页面上看到一个错误,说“Invalid redirect_uri”。
- 手动删除浏览器地址栏URL中的https,并登录
- 然后我得到一个错误“invalid_grant:redirect_uri不正确”
实际问题:
第1部分:由于整个设置完全在我的本地机器上运行,我不确定https重定向是在哪里被拾取的,以及如何防止它?这看起来像是重定向到https的Keycloak问题(只是猜测),但这似乎很奇怪,因为流量来自http。
第2部分:我需要显式实现 /oidc_callback 吗?我想Flask-OIDC会处理这个问题的。
2条答案
按热度按时间c6ubokkw1#
Sudeep Hasra的回答是正确的。
一个解决方法是使用flask的ssl_context选项。这样你所有的应用程序都可以在ssl上运行。最简单的两个选项是:
1.使用
ssl_context="adhoc"
1.使用
ssl_context=("/path/to/cert.pem", "/path/tokey.pem")
范例:
如果使用第二个选项,则必须创建证书对。在Linux中,你可以这样做:
openssl req -x509 -newkey rsa:4096 -nodes -out cert.pem -keyout key.pem -days 365
希望对你有帮助。
pieyvz9o2#
问题似乎出在Flask-OIDC上。该库有一个强制重定向URL通过HTTPS的提交。
如果我在第55行中将**_scheme改为http**,整个流程将按预期工作。