0

我正在构建一个烧瓶 API,它将操纵要在 thingsboard 中使用的数据。

长话短说,客户通过 thingsboard 登录,从中获取 jwt。

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

双方都使用相同的密钥。

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

jwt 操作新手,我错过了什么?

4

2 回答 2

0

确保JWT_AUTH_USERNAME_KEY与库用于获取用户的用户名相匹配。例如,当您获得 Thingsboard JWT 时,用户名在sub密钥中,许多库username默认使用。

也许这段代码可以帮助你(使用 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

于 2019-07-30T13:04:34.550 回答
0

flask-jwt-extended 的 3.21.0 版添加了一个JWT_DECODE_ISSUER可以为您解决此问题的选项:https ://github.com/vimalloc/flask-jwt-extended/releases/tag/3.21.0

于 2019-08-03T15:47:51.183 回答