问题描述
我有以下设置:
1:在 EC2 实例上运行的 Keycloak docker 容器。 (我暂时配置为接受http连接)
2:我的 Flask 应用程序以及在另一个 EC2 实例上的 docker 中运行的 Nginx 反向代理。
我已经在 keycloak 上创建了领域和客户端并配置了重定向 uri。
我可以让我的 Flask 应用程序访问 Keycloak 实例进行身份验证。
我添加了 from werkzeug.middleware.proxy_fix import ProxyFix
和 app.wsgi_app = ProxyFix(app.wsgi_app)
以使 redirect_uri 工作。
但是,当重定向发生时,我收到“未授权”错误(我也可以在 Nginx 日志中看到 401)。
我已将 OVERWRITE_REDIRECT_URI
设置为 OVERWRITE_REDIRECT_URI = 'https://authenticationdemo.mydomain/oidc_callback'
我将 Nginx 配置为将带有端点 oidc_callback 的 https 请求转发到我的 Flask 应用程序路由 /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 的日志 但重定向后这不起作用。
我都试过了
两者都不起作用。
我无法确定在传回身份验证信息时是否出现问题,或者是否存在一些基本配置错误。
有人可以指出正确的方法吗?
我已经查找并尝试了其他相关问题中的信息:
Flask_oidc gives Errno 99 Cannot assign requested address when run in Docker container
flask-oidc-redirect-uri-value-being-overwritten-somewhere
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 中导致了问题。删除它解决了问题。