我已经安装了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库覆盖了?
发布于 2018-02-19 18:45:50
解决之道
在configuration对象内部使用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'为什么它有效?
Flask-OIDC的默认行为是使用应用程序服务器上的/_oidc_callback端点(使用OIDC_CALLBACK_ROUTE指定),而不更改URL的模式或授权部分。
例如,当有人通过https上的反向代理(例如,使用nginx)公开他的应用程序时,可能会出现问题。flask应用程序本身并不知道它是通过https公开的,因此它只使用纯http URL。
此行为的源代码位于_flow_for_request(self)函数内的Flask-OIDC的__init__py文件中。
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发布于 2018-02-02 16:55:34
Eric,我知道您必须管理OIDC_CALLBACK_ROUTE设置才能路由到所需的URL (请参阅此处的http://flask-oidc.readthedocs.io/en/latest/)。Flask OIDC缺省值将uri重定向到/oidc_callback
https://stackoverflow.com/questions/40663585
复制相似问题