Flask-OIDC redirect_uri 值在某处被覆盖?

Eri*_*ric 4 flask python-3.x openid-connect

我已经安装了 Flask-OIDC 并且正在尝试使用我公司的服务对用户进行身份验证。我正在使用 client_secrets.json 文件,该文件正在为 client_id、client_secret 和其他值正确读取、解析和发送。我将 redirect_uri 变量存储在如下所示的行中:

"redirect_uris": ["https://example.com/_oid_response"],
Run Code Online (Sandbox Code Playgroud)

当请求被发送到身份验证服务时,它看起来像这样:

redirect_uri=http%3A%2F%2Fexample.com%2Foidc_callback
Run Code Online (Sandbox Code Playgroud)

任何想法这里发生了什么?在我用于向身份验证提供程序注册的任何信息中,我的任何应用程序文件、任何 json 中都没有“oidc_callback”字符串。它是否设置不正确,或者被 Flask 或 Flask-OIDC 库覆盖?

Jac*_* L. 5

修复

使用 OVERWRITE_REDIRECT_URI = 'https://www.your-server.com/your_oidc_callback_uri'内部配置对象(相同,您保留SECRET_KEY或的位置OIDC_SCOPES),例如:

app.config['OVERWRITE_REDIRECT_URI'] = 'https://www.your-server.com/your_oidc_callback_uri'
Run Code Online (Sandbox Code Playgroud)

为什么有效

的默认行为Flask-OIDC是使用/_oidc_callback应用程序服务器上的端点(用 指定OIDC_CALLBACK_ROUTE),而不更改 URL 的架构或权限部分。

例如,当有人通过https(例如使用nginx)通过反向代理公开他的应用程序时,可能会出现问题。Flask 应用程序本身不知道它是通过 https 公开的,因此它只使用普通的 http URL。

此行为的来源位于Flask-OIDC__init__py文件中,_flow_for_request(self)函数内部。

def _flow_for_request(self):
    """
    Build a flow with the correct absolute callback URL for this request.
    :return:
    """
    flow = copy(self.flow)
    redirect_uri = current_app.config['OVERWRITE_REDIRECT_URI']
    if not redirect_uri:
        flow.redirect_uri = url_for('_oidc_callback', _external=True)
    else:
        flow.redirect_uri = redirect_uri
    return flow
Run Code Online (Sandbox Code Playgroud)

  • 有趣的是,虽然我确实设置了“OVERWRITE_REDIRECT_URI”,但之后我得到了另一个重定向到http url(而不是https url) (2认同)

小智 0

Eric,我知道您必须管理 OIDC_CALLBACK_ROUTE 设置才能路由到所需的 URL(请参阅此处http://flask-oidc.readthedocs.io/en/latest/)。Flask OIDC 默认将 uri 重定向到 /oidc_callback