如何使用其他发行人的jwt?

时间:2019-07-09 15:22:28

标签: python flask jwt thingsboard flask-jwt-extended

我正在构建一个烧瓶API,该API将操纵将在物联网中使用的数据。

长话短说,客户可以通过Thingsboard登录,并从中获得jwt。

但是API拒绝jwt表示签名验证失败。

双方都使用相同的密钥。

这两个东西都在远程服务器上,API在开发过程中目前是本地的。

jwt操作的新手,我想念什么?

2 个答案:

答案 0 :(得分:0)

确保JWT_AUTH_USERNAME_KEY与库用来获取用户的用户名相符。 例如,当您获得一个Thingsboard JWT时,用户名位于sub键中,并且许多库默认都使用username

也许这段代码可以为您提供帮助(implementation with JWT Rest Framework

class CustomAuth(JSONWebTokenAuthentication):

    def authenticate_credentials(self, payload):
        """
        Returns an active user that matches the payload's user id and email.
        """
        User = get_user_model()

        # Thingsboard payload
        if payload.get('sub') is not None:
            username = payload.get('sub')
        else:
        # Our payload
            username = payload.get('username')
        if not username:
            msg = _('Invalid payload.')
            raise exceptions.AuthenticationFailed(msg)

        try:
            user = User.objects.get_by_natural_key(username)
        except User.DoesNotExist:
            msg = _('Invalid signature.')
            raise exceptions.AuthenticationFailed(msg)

        if not user.is_active:
            msg = _('User account is disabled.')
            raise exceptions.AuthenticationFailed(msg)

        return user

答案 1 :(得分:0)

flask-jwt-extended的3.21.0版本添加了JWT_DECODE_ISSUER选项,该选项应为您解决:https://github.com/vimalloc/flask-jwt-extended/releases/tag/3.21.0