我已经安装了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
有什么想法在这里发生了什么?没有" oidc_callback"在我用于向身份验证提供程序注册的任何信息中的任何json中的任何应用程序文件中的字符串。是不是设置正确,还是被Flask或Flask-OIDC库覆盖了?
答案 0 :(得分:1)
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_KEY
或OIDC_SCOPES
)。
答案 1 :(得分:0)
Eric,我知道您必须管理OIDC_CALLBACK_ROUTE设置以路由到所需的URL(请参阅此处http://flask-oidc.readthedocs.io/en/latest/)。 Flask OIDC默认将uri重定向到/ oidc_callback