向 Flask 中的非注册用户授予访问权限的链接

问题描述 投票:0回答:1

我在 Flask 中有一个非常简单的 Web 应用程序,它使用 Chart.js 显示来自 PostgreSQL 数据库的一些数据。为此,我在 @login_required 下有一条路线“/plot”,已登录的用户可以通过 POST 来渲染绘图。

我认为在网页中添加一些类似于 Google 的“知道链接的人可以访问”的功能会很酷,这样会生成一个特殊的链接,允许未在 web 应用程序中注册的客户端将相应的数据 POST 到 '/plot '并享受图表,克服@login_required,但只能访问原始用户选择共享的特定数据。

实现此类功能的最佳方法是什么?它有什么具体的名字吗?不幸的是,我无法找到更多有关它的信息。

提前谢谢您

我已经为登录用户提供了网络应用程序。我希望创建这些特殊链接,以允许外部客户端无需注册即可以安全的方式访问特定数据

authentication flask flask-login
1个回答
0
投票

所以根据我的理解,你有路线“/plot”来接受 POST 请求来渲染一些图。并且您希望它采用特殊链接,允许在不登录的情况下临时使用“/plot”,即随 链接本身而不是服务器上的数据进行更改

需要明确的是,谷歌的“知道链接的人可以访问”的工作方式与我上面所说的不同。在 Google 的情况下,链接始终相同,但服务器上的文件权限发生了变化。

实现此类功能的最佳方法是什么?

最好的方法是使用短字符串来授权所使用的访问链接有效并且有权访问所请求的资源。

它有什么具体的名字吗?

您想要做的是使用 令牌进行授权

执行此操作的安全方法是向用户提供带有令牌的链接,并在访问时检查令牌是否有效。如何在服务器上创建和维护此令牌取决于您,无论是使用数据库还是使用一些库,例如 JWTitsdangerous 。但是,您的请求路线大多与以下内容相同:

@app.route('/plot/<string:token>', methods=['POST'])
def plot_with_parameter(token):
    if request.method == 'POST':
        # eg you access a database with sqlalchemy
        token = access_tokens.query.filter_by(id=token).first() 
        if token:
           if datetime.datetime.utcnow() < token.expiration_time:
             #Handle Access successful
           else:
             #Handle Token expired
        else:
             #Handle  Invalid token

在上面的示例中,您可以有一个表 access_tokens,它将令牌存储为 ID 以及相关数据,例如过期时间、允许的最大使用次数等。您提供给用户的链接将类似于 www.example.com/情节/令牌字符串

© www.soinside.com 2019 - 2024. All rights reserved.