即将关闭Google对OpenID 2的支持,任何使用Flask-Googleauth等便捷库的人都必须迁移。 OpenID Connect有一个Flask库,名为flask-oidc。不幸的是,似乎没有关于如何使用它的任何信息。我查找标记为flask
和openid-connect
的SO问题,但发现为0,因此这个问题。
以下是我作为概念验证使用flask-oidc的内容。它基于flask-oidc's app.py file:
"""
Flask app for testing the OpenID Connect extension.
"""
from flask import Flask
from flask.ext.oidc import OpenIDConnect
def index():
return "too many secrets", 200, {
'Content-Type': 'text/plain; charset=utf-8'
}
def create_app(config, oidc_overrides=None):
app = Flask(__name__)
app.config.update(config)
if oidc_overrides is None:
oidc_overrides = {}
oidc = OpenIDConnect(app, **oidc_overrides)
app.route('/')(oidc.check(index))
return app
if __name__ == '__main__':
APP = create_app({
'OIDC_CLIENT_SECRETS': './client_secrets.json',
'SECRET_KEY': 'secret'})
APP.run(host="127.0.0.1", port=8080, debug=True)
按照here所述注册我的应用程序后,这会成功将用户发送给Google进行身份验证,然后将其返回给http://127.0.0.1:8080/oidc_callback
,然后将其重定向到https://127.0.0.1:8080/
,然后重定向用户返回Google进行身份验证,创建重定向循环。
我的问题当然很简单:如何让经过身份验证的用户看到该索引页?
答案 0 :(得分:6)
问题是oidc_callback正确地创建了一个身份验证cookie(称为oidc_id_token
)并重定向到index
,但index
无法检索该cookie,因为该应用程序托管在HTTP上,并且Cookie设置了Secure flag,因此浏览器不愿意通过HTTP将其发送回应用。
通过将OpenIDConnect配置项OIDC_ID_TOKEN_COOKIE_SECURE
设置为False
,解决方案是(仅限本地开发!)关闭安全标志:
if __name__ == '__main__':
APP = create_app({
'OIDC_CLIENT_SECRETS': './client_secrets.json',
'OIDC_ID_TOKEN_COOKIE_SECURE': False,
'SECRET_KEY': 'secret'})
APP.run(host="127.0.0.1", port=8080, debug=True)