问题标签 [flask-oidc]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
295 浏览

flask - Keycloak Gitpod Flask OIDC:oauth2client.client.FlowExchangeError:无效响应:301

我正在尝试实现Flask-OIDCKeycloakGitpod工作区中运行的 Flask 应用程序中。

我正在Keycloak像这样运行应用程序和服务器:

基于这篇文章

我可以Keycloak从应用程序内重定向到普通用户的登录页面Flask,但是当我使用现有用户登录时,我得到以下信息:

oauth2client.client.FlowExchangeError:无效响应:301


client_secrets.json目前看起来像这样:

keycloak中的相关客户端配置:

http在所有这些 url 中使用而不是https,因为当我使用时https Keycloakredirect_uri是无效的。这似乎是这里的实际问题,因为 gitpod url 使用https,但我不知道如何处理这个问题。我已经尝试了一些像这里描述的解决方案,但无法让它们工作。

相关部分路由:

其中部分standalone.xml可能是相关的:

更新

按照Jan Garaj 的建议将 http url 更改为 https并设置OVERWRITE_REDIRECT_URI我不再收到invalid response: 301错误后:

现在我可以进入 keycloak 登录表单,但在登录时我现在得到:

oauth2client.client.FlowExchangeError:无效响应:401。

这些是提出的要求:

网络检查器内部的请求: 请求网络

0 投票
1 回答
55 浏览

python-3.x - Python 从另一个全局对象构造一个可变全局对象

我有main.pyapp.pyapp.py包含create_app()返回app对象。main.py来电create_app()。我必须在main.py. 这个全局对象app作为输入参数。这在 python 中对我来说似乎很复杂。当应用程序启动时,我如何可能实现这个全局对象构造?

具体来说,我正在使用flask_oidc并且需要构造一个oidc = OpenIDConnect(app)inmain.py并使oidc对象在其他控制器 .py 文件中可用。此oidc对象将存储用户信息并验证用户是否已通过身份验证。

任何建议和见解都值得赞赏。

0 投票
1 回答
223 浏览

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 ProxyFixapp.wsgi_app = ProxyFix(app.wsgi_app)让redirect_uri 工作。

但是,当重定向发生时,我收到“未授权”错误(我也可以在 nginx 日志中看到 401)。

我已经将 nginx 设置OVERWRITE_REDIRECT_URIOVERWRITE_REDIRECT_URI = 'https://authenticationdemo.mydomain/oidc_callback' 将带有端点 oidc_callback 的 https 请求转发到我的烧瓶应用程序路由/oidc_callback(我没有实现自己的回调)。

我无法解决这个问题,因为我无法弄清楚回调哪里出错了。我可以通过 GET /oidc_callback?state=<...somevalue..>&session_state=<...somevalue>&code=<..somevalue...> 查看来自 nginx 的日志,但是在重定向之后这不起作用。

我都试过了

  1. 在重定向 uri 中使用 ip 地址
  2. 域名与我的证书相同,并使用 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

(并阅读许多其他类似的)

我不是在寻找自定义回调。我只需要默认的回调行为,因为它没有反向代理。

0 投票
0 回答
234 浏览

python - 为什么来自 Flask-OIDC 扩展的访问令牌对 keycloak GET /users 端点无效?

我正在尝试从 keycloak 服务器访问领域用户列表,但我不明白为什么来自Flask-OIDC in-buildget_access_token()方法的令牌对我不起作用。

当我如下所述使用请求中的令牌时,一切都很好:

但是当token = openid_connect.get_access_token()我收到{"error":"HTTP 401 Unauthorized"}

这是我的 client_secrets.json 文件:

get_access_token()来自方法的令牌:

由于某些明显的原因它不起作用吗?也许Flask-OIDC使用密码grant_type 来获取令牌?我没有在OpenIDConnect对象源代码中找到指定的grant_type,只是它将令牌保存在模块中的神秘g对象中。flask

先感谢您!

0 投票
0 回答
41 浏览

keycloak - 使用 Flask-OIDC 验证公共令牌(概念问题)

我一直在尝试使用 keycloak 来保护我的 python 后端服务。我目前使用公共密钥斗篷客户端为前端建立了用户登录。Fir 测试,我获得了前端客户端的令牌,然后尝试使用 Flask-OIDC 在我的 python 代码中验证令牌。经过一周的努力,我仍然无法验证令牌。

我的概念混乱与客户有关。为了验证令牌,您必须使用机密或不记名 keycloak 客户端。我可以针对不记名客户端验证从公共客户端发出的令牌吗?如果不是,正确的方法是什么?

谢谢。

0 投票
0 回答
96 浏览

reactjs - React + Flask + Flask OIDC + Keycloak + Bearer Only

我正在努力使用烧瓶 oidc 和 keycloak 保护烧瓶 API 后端。我的项目包括一个 React 前端和一个烧瓶应用程序,作为受 Keycloak 服务器 v13.0.1 保护的 REST API。因此,我为前端创建了一个公共客户端,为后端创建了一个仅承载客户端,但我不断收到带有“需要令牌但无效消息”的 401。Flask 没有写任何关于错误原因的日志。我无法弄清楚我做错了什么,所以我希望你能帮助我。

这是 flask-oidc 的 client_secrets.json

这些是 flask-oidc 配置参数(它总是采用默认值)

这是令牌保护方法:

最后这是我为客户端配置的密钥斗篷:

客户端设置 客户端凭据

0 投票
1 回答
23 浏览

python - 使用 redirect_to_auth_server() 重定向到 oAuth 提供程序时获取“KeyError:destination”

我想要一种使用flask-oidc激活和停用 OIDC 检查的方法。
使用@require_login装饰器是个问题,因为它不能被停用。例如 :

当我被重定向到我的 oAUth 提供商时,这与 OIDC 配合得很好。但现在我想g_use_oidc设置为 False 并@require_login停止重定向呼叫。


为了实现这一点,我创建了一个装饰器来检查如下g_use_oidc状态:

我应该能够像这样使用装饰器:

不幸的是,我从 OIDC 得到了这个堆栈跟踪: