使用FlaskLogin验证Nginx反向代理

2024-05-21 09:18:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在实现一个修改版的Duo Labs的py_webauthn演示,以便向我的网站添加物理身份验证。这个演示是在Flask中构建的,它使用flask-login库和SQLAlchemy数据库来存储用户数据。在

理想情况下,我希望Flask应用程序充当Nginx验证器,以便登录的用户能够访问服务器上的其他服务。在

我最初试图在Flask中实现反向代理,但我发现的唯一可行的解决方案需要Twisted框架(因为Shellinabox等服务需要不断发出请求),它需要一个完全独立的WSGI应用程序来建立一个不必要的中间人,而这个中间人很难集成。在

我的理想结果是,用户首先访问服务器,然后proxy-pass到Flask身份验证服务器,然后可以通过Nginx访问其他几个反向代理服务。我仍然对Python反向代理持开放态度,但我发现Nginx最适合我的需求。在

我应该如何整合烧瓶和Nginx?在

(在应用程序副本演示库的文件可用here。Webauthn功能只是建立在flask-login之上。)


Tags: 用户py服务器身份验证应用程序flask代理login
1条回答
网友
1楼 · 发布于 2024-05-21 09:18:02

我解决了!可以将内置的Nginxauth_request与Flask一起用作身份验证器。简单地说,如果Flask在被Nginx查询时返回一个200,Nginx将允许访问另一个页面。或者,验证器可以返回一个错误401,将用户发送到Nginx 401页面(在我的例子中,该页面会将用户重定向到登录页面)。在

要复制,请在烧瓶中添加验证器:

@app.route("/auth")
def nginx_auth():
    if current_user.is_authenticated:
        return "You are logged in! Sweet!"
    else:
        return 'Sorry, but unfortunately you\'re not logged in.', 401

然后,在Nginx中,将auth_request指向验证器,并将401重定向到登录页面。在

^{pr2}$

(代码修改自Nginx documentation.

相关问题 更多 >