基本Flask OpenID Connect示例

Ran*_*nge 6 flask openid-connect

随着Google对OpenID 2的支持即将关闭,任何使用Flask-Googleauth等便捷库的人都必须迁移.有一个用于OpenID Connect的Flask库,名为flask-oidc.不幸的是,似乎没有关于如何使用它的任何信息.我找了标记的做题flaskopenid-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)
Run Code Online (Sandbox Code Playgroud)

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

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

Ran*_*nge 6

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

通过将OpenIDConnect配置项设置OIDC_ID_TOKEN_COOKIE_SECUREFalse:解决方案是(仅用于本地开发!)关闭安全标志:

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)
Run Code Online (Sandbox Code Playgroud)