Flask-OIDC redirect_uri值被覆盖了吗?

问题描述 投票:1回答:2

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

"redirect_uris": ["https://example.com/_oid_response"],

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

redirect_uri=http%3A%2F%2Fexample.com%2Foidc_callback

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

python-3.x flask openid-connect
2个回答
0
投票

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


0
投票

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

例如,当有人通过https上的反向代理暴露他的应用程序时(例如使用nginx),可能会出现问题。烧瓶应用程序本身不知道它是通过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

要修复它,在配置对象中使用OVERWRITE_REDIRECT_URI = 'https://www.your.server.com/your_oidc_callback_uri'(同样,你保留SECRET_KEYOIDC_SCOPES)。

© www.soinside.com 2019 - 2024. All rights reserved.