2016-11-17 76 views
1

我已经安装了Flask-OIDC,并试图用我公司的服务对用户进行身份验证。我正在使用client_secrets.json文件,该文件正在被读取,解析并正确发送给client_id,client_secret和其他值。我存储REDIRECT_URI变量在一条线上,看起来像这样:Flask-OIDC redirect_uri值被覆盖在某处?

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

当请求被发送到验证服务,它是走出去寻找这样的:

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

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

+0

任何运气得到这个工作? – Atifm

+0

@Atifm Nope,我最终使用了一个由同事为我们特定的OpenID连接定制的不同库。你看到同样的问题吗? – Eric

回答

0

Flask-OIDC的默认行为是,它使用应用程序服务器(与OIDC_CALLBACK_ROUTE指定)上/_oidc_callback端点,而不改变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)。