Flask认证、委托人和Flask安全

Flask认证、委托人和Flask安全,flask,flask-security,flask-principal,Flask,Flask Security,Flask Principal,有人能告诉我这3个扩展之间是否有根本的区别,或者它们都做了类似的事情吗?我一直在看文档,似乎有很多交叉。我猜有些只是提供了更多的功能 我想将用户角色添加到我的应用程序中,以便某些用户具有某些权限。i、 e.level1用户可以创建5个资源,level2用户可以创建10个资源,等等。我一直在考虑自己滚动,这似乎并不太棘手。我正在考虑使用一个装饰器,这个解决方案会有任何安全问题吗?我已经在使用Flask登录,所以我会将其与此集成。Flask Auth是身份验证和权限的单一解决方案,但我没有看到它被大

有人能告诉我这3个扩展之间是否有根本的区别,或者它们都做了类似的事情吗?我一直在看文档,似乎有很多交叉。我猜有些只是提供了更多的功能


我想将用户角色添加到我的应用程序中,以便某些用户具有某些权限。i、 e.level1用户可以创建5个资源,level2用户可以创建10个资源,等等。我一直在考虑自己滚动,这似乎并不太棘手。我正在考虑使用一个装饰器,这个解决方案会有任何安全问题吗?我已经在使用Flask登录,所以我会将其与此集成。

Flask Auth是身份验证和权限的单一解决方案,但我没有看到它被大量使用/引用

校长会做你想做的事,但这是赤裸裸的;滚动你自己不会有更多的工作

Flask Security将Flask Login、-Principal和其他一些扩展整合成一个更连贯的整体,将它们作为依赖项安装。尽可能使用它提供的方法,而不是单个扩展中的方法。我并没有用过它,但它似乎需要大量的体力劳动


对于只需要添加用户角色的特定用例,我建议使用Flask Principal。它运行良好,易于维护,并且具有足够的通用性,可以与您的任何需求集成。

一般来说,它们都是相似的,但其中一些具有比其他更多的功能。例如,Flask的安全性非常高,有很多额外的安全特性,比如额外加密。事实上,Flask安全性将Flask主体作为一个子集。Flask主体可以使用Flask登录进行身份验证,即使这只是一个选项。所以你可以看到它们都是相关的,但有些是彼此的子集或超集

现在,在您的具体案例中,您已经在使用Flask登录,这非常好。如果您需要添加Flask Login不支持的用户角色,我建议您扩展您的用户模型以添加角色列,然后覆盖登录所需的decorator。如果您尝试使用诸如Flask Security等扩展,那么在您的情况下可能会有过大的杀伤力

例如,我将使用角色字段扩展我的用户类。它可以有“ANY”、“ADMIN”等值。任何方法都不重要

class User(UserMixin):
    def get_role():
        return rolename
然后,我将覆盖登录所需的装饰程序,如下所示:

def login_required(role="ANY"):
    def wrapper(fn):
        @wraps(fn)
        def decorated_view(*args, **kwargs):

            if not current_user.is_authenticated():
                 return current_app.login_manager.unauthorized()

            urole = current_user.get_role()
            if ( (urole != role) and (role != "ANY")):
                    logout_user()
                    return current_app.login_manager.unauthorized()    
            return fn(*args, **kwargs)   
        return decorated_view
    return wrapper

你能解释一下为什么烧瓶安全会被过度使用吗?