Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 有没有一种方法可以使用特定于租户的JWT令牌_Python_Flask_Jwt_Multi Tenant_Flask Jwt Extended - Fatal编程技术网

Python 有没有一种方法可以使用特定于租户的JWT令牌

Python 有没有一种方法可以使用特定于租户的JWT令牌,python,flask,jwt,multi-tenant,flask-jwt-extended,Python,Flask,Jwt,Multi Tenant,Flask Jwt Extended,我目前正在开发一个SPA应用程序(angular),其后端带有Python/FlaskAPI 该应用程序将支持多个租户,我对安全概念有点纠结。我目前正在使用jwt extended 发布的JWT令牌对所有租户都有效(我当然可以让用户使用令牌,然后检查用户是否有权访问该租户),但我建议使用特定于租户的JWT令牌(以便用户被@JWT_所需的命令阻止) 我的想法是每个租户拥有不同的JWT_SECRET_密钥(就像将租户附加到我的密钥中一样),然后检查每个租户令牌的有效性(租户将通过url标识,作为子域

我目前正在开发一个SPA应用程序(angular),其后端带有Python/FlaskAPI

该应用程序将支持多个租户,我对安全概念有点纠结。我目前正在使用jwt extended

发布的JWT令牌对所有租户都有效(我当然可以让用户使用令牌,然后检查用户是否有权访问该租户),但我建议使用特定于租户的JWT令牌(以便用户被@JWT_所需的命令阻止)

我的想法是每个租户拥有不同的JWT_SECRET_密钥(就像将租户附加到我的密钥中一样),然后检查每个租户令牌的有效性(租户将通过url标识,作为子域或参数)

默认情况下,密钥是应用程序级别上的(带有app.config('JWT_SECRET_key'),但看起来您可以覆盖flask_JWT_extended.JWTManager中的密钥编码/解码函数。但是,我不确定我的@JWT_需要覆盖哪些函数才能运行我想要的(因此,在解码时使用custoim密钥,该密钥将作为我的密钥+租户的串联生成)


如果我的概念没有意义/如果有更好和/或更简单的方法来实现这一点,请让我知道。

您只需将我想要的租户放在用户表中,以指定每个租户的用户,然后您需要将所有详细信息放在jwt中,然后在angular side中,您可以从jwt令牌中获取用户详细信息和租户详细信息,以便每个用户访问特定租户以保护端点。

最终生成特定于租户的JWT非常容易(在下面的示例中,我将密钥与从URL提取的租户连接起来)

您只需要定义customDecodeKey/customEncode密钥方法:

def customEncodeKey(arg1):
    return app.config['JWT_SECRET_KEY'] + request.path.split('/')[1]

def customDecodeKey(arg1, arg2):
    return app.config['JWT_SECRET_KEY'] + request.path.split('/')[1]
然后向jwt“注册”:

jwt = JWTManager(app)
jwt.decode_key_loader(customDecodeKey)
jwt.encode_key_loader(customEncodeKey)