【问题标题】:Is there a way to have tenant specific JWT token有没有办法让租户特定的 JWT 令牌
【发布时间】:2020-01-15 00:27:49
【问题描述】:

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

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

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

我的想法是为每个租户设置不同的 JWT_SECRET_KEY(例如将租户附加到我的密钥),然后检查每个租户令牌的有效性(租户将由 url 标识,作为子域或参数)

默认情况下,密钥在应用程序级别(使用 app.config('JWT_SECRET_KEY') 但看起来您可以覆盖flask_jwt_extended.JWTManager 中的密钥编码/解码函数。但是我不确定我使用哪些函数必须覆盖我的@jwt_required 才能正常工作(因此要在解码中使用自定义密钥,该密钥将作为我的密钥+租户的串联生成)

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

【问题讨论】:

    标签: python flask jwt multi-tenant flask-jwt-extended


    【解决方案1】:

    他你只是把我要的租户放在用户表中以指定每个租户的用户,然后你需要将所有详细信息放在 jwt 中,然后在角度方面你可以从 jwt 令牌中获取用户详细信息和租户详细信息访问每个用户的特定租户以保护端点。

    【讨论】:

      【解决方案2】:

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

      你只需要定义一个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)
      

      【讨论】:

        猜你喜欢
        • 2017-09-11
        • 1970-01-01
        • 2020-06-23
        • 1970-01-01
        • 2020-06-02
        • 2020-10-20
        • 2016-10-21
        • 2015-06-07
        • 2022-01-02
        相关资源
        最近更新 更多