7

随着谷歌对 OpenID 2 的支持即将关闭,任何使用像Flask-Googleauth这样方便的库的人都必须迁移。OpenID Connect 有一个 Flask 库,称为flask-oidc。不幸的是,似乎没有任何关于如何使用它的信息。我查找了标记为flaskand的 SO 问题openid-connect,但发现为零,因此这个问题。

以下是我汇总的 flask-oidc 的概念验证使用。它基于flask-oidc 的 app.py 文件

"""
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)

按照此处所述注册我的应用程序后,这成功地将用户发送到 Google 进行身份验证,并将它们返回到http://127.0.0.1:8080/oidc_callback,然后将它们重定向到https://127.0.0.1:8080/,但随后将用户重定向回 Google 进行身份验证,从而创建重定向循环。

当然,我的问题很简单:如何让经过身份验证的用户看到该索引页面?

4

1 回答 1

7

问题是 oidc_callback 正确创建了一个身份验证 cookie(称为oidc_id_token)并重定向到index,但index无法检索该 cookie,因为该应用程序托管在 HTTP 上,并且 cookie 设置了Secure 标志,因此浏览器不愿意发送它通过 HTTP 返回应用程序。

OIDC_ID_TOKEN_COOKIE_SECURE解决方案是(仅用于本地开发目的!)通过将 OpenIDConnect 配置项设置为来关闭 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)
于 2015-03-15T01:09:39.720 回答