nginx - 在 EC2 上部署的 docker 中使用 flask_oidc 和 nginx 反向代理的烧瓶应用程序在使用 keycloak 进行身份验证后给出未授权错误
问题描述
我有以下设置:
1:在 EC2 实例上运行的 Keycloak docker 容器。(我已将其临时配置为接受 http 连接)
2:我的 Flask 应用程序与 nginx 反向代理一起在另一个 EC2 实例上的 docker 中运行。
我在 keycloak 上创建了领域和客户端并配置了重定向 uri。
我能够让我的烧瓶应用程序到达 Keycloak 实例进行身份验证。
我添加from werkzeug.middleware.proxy_fix import ProxyFix
并app.wsgi_app = ProxyFix(app.wsgi_app)
让redirect_uri 工作。
但是,当重定向发生时,我收到“未授权”错误(我也可以在 nginx 日志中看到 401)。
我已经将 nginx 设置OVERWRITE_REDIRECT_URI
为OVERWRITE_REDIRECT_URI = 'https://authenticationdemo.mydomain/oidc_callback'
将带有端点 oidc_callback 的 https 请求转发到我的烧瓶应用程序路由/oidc_callback
(我没有实现自己的回调)。
location /oidc_callback{
proxy_pass http:/<flask_app_name_in_docker>:<port>/oidc_callback;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Host $host;
proxy_redirect off;
}
我无法解决这个问题,因为我无法弄清楚回调哪里出错了。我可以通过 GET /oidc_callback?state=<...somevalue..>&session_state=<...somevalue>&code=<..somevalue...> 查看来自 nginx 的日志,但是在重定向之后这不起作用。
我都试过了
- 在重定向 uri 中使用 ip 地址
- 域名与我的证书相同,并使用 keycloak 在 EC2 实例上配置主机文件以指向带有烧瓶应用程序的 EC2 实例的正确 IP 地址
两者都不起作用。
我无法弄清楚在传回身份验证信息时是否出现问题,或者是否存在一些基本配置错误。
有人可以指出正确的方法吗?
我已经在其他相关问题中查找并尝试了信息:
Flask_oidc 在 Docker 容器中运行时给出 Errno 99 Cannot assign requested address when run
flask-oidc-redirect-uri-value-被覆盖-某处
flask-oidc-with-keycloak-oidc-callback-default-callback-not-working
(并阅读许多其他类似的)
我不是在寻找自定义回调。我只需要默认的回调行为,因为它没有反向代理。
解决方案
更新:我发现问题是由于在flask_oidc中的函数_is_id_token_valid(self,id_token)
中匹配'OIDC_VALID_ISSUER'的检查失败。将端口号放在 client_secrets 中颁发者的 url 中会导致问题。删除它解决了这个问题。
推荐阅读
- python - 在本地运行 Firebase 托管时无法更新更改 index.html
- r - 跨字符串查找值的频率
- python - 当 cuda 不可用时,'use_cuda' 设置为 True。确保 CUDA 可用或设置 use_cuda=False
- socket.io - Socket.IO 发射到特定房间不起作用,它正在发送到所有套接字
- google-sheets - 有没有办法在 Google 表格中跨工作表创建数据/信息排序系统?
- mysql - 将 auto_increment 添加到 NULL 值列 - MySQL
- python - Jina2 标签异常
- javascript - d3来自本地json变量的谷歌地图
- python - 如何求CNN模型(keras)的ROC曲线和AUC分数
- python - 如何选择训练 KNN 分类器的“最佳”样本?