有没有办法让租户特定的JWT令牌 [英] Is there a way to have tenant specific JWT token

查看:0
本文介绍了有没有办法让租户特定的JWT令牌的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我目前正在开发一个后端具有Python/FlaskAPI的SPA应用程序(角度)。

这个应用程序将支持多个租户,我在安全概念上有点困难。我当前正在使用JWT-Extended

颁发的JWT令牌对所有租户都有效(我当然可以从令牌中获取用户,然后检查用户是否应该有权访问该租户),但我希望有特定于租户的JWT令牌(以便用户被@JWT_REQUIRED阻止)。

我的想法是让每个租户有不同的JWT_SECRET_KEY(类似于将租户附加到我的密钥),然后检查每个租户的令牌的有效性(租户将通过URL标识为子域或参数)

默认情况下,密钥是应用程序级别的(使用app.config(‘JWT_SECRET_KEY’)),但看起来您可以覆盖flaskjwt_tended.JWTManager中的密钥编码/解码函数。然而,我不确定我必须为我的@JWT_Required重写哪些函数才能工作(因此在解码中使用保管密钥,该密钥将作为我的密钥+承租人的串联生成)

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

推荐答案

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

您只需要定义一个CustomDecodeKey/CustomEncode key方法:

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)

这篇关于有没有办法让租户特定的JWT令牌的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆