如何使用不同发行人的jwt?

2024-04-25 05:53:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在构建一个flaskapi,它将处理要在thingsboard中使用的数据。你知道吗

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

但是API拒绝jwt说签名验证失败。你知道吗

双方使用相同的密钥。你知道吗

两个thingsboard都在一个远程服务器上,API目前在开发过程中是本地的。你知道吗

刚接触jwt操作,我还缺什么?你知道吗


Tags: 数据服务器api客户远程过程密钥jwt
2条回答

flask jwt extended的版本3.21.0添加了一个JWT_DECODE_ISSUER选项,该选项可以为您解决这个问题:https://github.com/vimalloc/flask-jwt-extended/releases/tag/3.21.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

相关问题 更多 >