我有一个烧瓶驱动的应用程序,我正在尝试为此应用程序启用OIDC SSO。我选择了wso2作为身份服务器。我创建了一个回调URL,并在Identity Server和flask应用程序中添加了必要的内容,如下所示。该应用程序可以流经凭据记录页面,然后,我收到SSL证书验证错误。
我的尝试:
root.child('admins').child(auth.token.phone_number)
无效。代码段:
app.run(ssl_context='adhoc')
客户信息:
from flask import Flask, g
from flask_oidc import OpenIDConnect
# import ssl
logging.basicConfig(level=logging.DEBUG)
app = Flask(__name__)
app.config.update({
'SECRET_KEY': 'SomethingNotEntirelySecret',
'TESTING': True,
'DEBUG': True,
'OIDC_CLIENT_SECRETS': 'client_secrets.json',
'OIDC_ID_TOKEN_COOKIE_SECURE': False,
'OIDC_REQUIRE_VERIFIED_EMAIL': False,
})
oidc = OpenIDConnect(app)
@app.route('/private')
@oidc.require_login
def hello_me():
# import pdb;pdb.set_trace()
info = oidc.user_getinfo(['email', 'openid_id'])
return ('Hello, %s (%s)! <a href="/">Return</a>' %
(info.get('email'), info.get('openid_id')))
if __name__ == '__main__':
# app.run(host='sanudev', debug=True)
# app.run(debug=True)
# app.run(ssl_context='adhoc')
app.run(ssl_context=('cert.pem', 'key.pem'))
# app.run(ssl_context=('cert.pem', 'key.pem'))
应用信息:
答案 0 :(得分:0)
您好,回答我自己的问题只是为了有效地到达社区,在这里我可以表达出我被困在哪里以及修复背后的所有故事。
TLDR:
之所以出现SSL问题,是因为在OIDC流中,wso2服务器必须仅通过SSL隧道通信或传输安全验证令牌。这是出于安全目的而必须保留的强制性标准。 是的,碳服务器具有SSL证书(自签名一个),以通过SSL Tunnel客户端进行安全令牌传输,还必须至少进行自签名证书配置。
由于我使用的是flask-oidc库,因此有一项规定允许这样做,请参阅此处的配置。
match = re.search('name="csrfmiddlewaretoken" value="([0-9a-zA-z]+)', body)
if match:
csrfmiddlewaretoken = match.group(1)
else:
# deal with it
出于快速开发目的,您可以通过在flask应用运行设置中添加临时配置来启用HTTPS中的安全连接。
{
"web": {
"auth_uri": "https://localhost:9443/oauth2/authorize",
"client_id": "someid",
"client_secret": "somesecret",
"redirect_uris": [
"https://localhost:5000/oidc_callback"
],
"userinfo_uri": "http://localhost:9763/oauth2/userinfo",
"token_uri": "http://localhost:9763/oauth2/token",
"token_introspection_uri": "http://localhost:9763/oauth2/introspect",
"issuer": "https://localhost:9443/oauth2/token" # This can solve your issue
}
}
答案 1 :(得分:0)
让我用这个警告作为这个答案的开头:
不,说真的,不要在生产中这样做,这应该只用于开发目的。
无论如何,打开 oauth2client\transport.py
文件。
您将在吐出的错误中看到此文件位置。对我来说,它在我的 anaconda 环境中
AppData\Local\Continuum\anaconda3\envs\conda_env\lib\site-packages\oauth2client\transport.py
找到这一行(我的第 73 行)
def get_http_object(*args, **kwargs):
"""Return a new HTTP object.
Args:
*args: tuple, The positional arguments to be passed when
contructing a new HTTP object.
**kwargs: dict, The keyword arguments to be passed when
contructing a new HTTP object.
Returns:
httplib2.Http, an HTTP object.
"""
return httplib2.Http(*args, **kwargs)
将返回更改为
return httplib2.Http(*args, **kwargs, disable_ssl_certificate_validation=True)
你可能需要对 flask_oidc/__init__.py 的第 445 行做同样的事情
credentials.refresh(httplib2.Http(disable_ssl_certificate_validation=True))