【问题标题】:django rest framwork Error decoding signature with jwt RS256django rest框架使用jwt RS256解码签名错误
【发布时间】:2018-08-26 09:16:03
【问题描述】:

我正在使用带有 jwt 的 django rest 框架。

在设置中我使用了 RS256 算法

我想在用户身份验证后发送令牌,这是我的功能,我正在尝试使用 user_id 和 is_user 数据发送令牌,但当我将请求中的令牌传递给服务器服务器响应时:

detail
:
"Error decoding signature."

为什么?

这是我的http://localhost:8000/login/ 服务器回复:

{
    "username": "admin",
    "email": "",
    "token": "b'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoxLCJpc191c2VyIjp0cnVlfQ.kIz9TBYqVJVgFV5siM3QfNWHxBN28BlZRY_t8TFADmg'",
    "is_staff": false
}

登录功能:

JWT_SECRET = 'secret'
JWT_ALGORITHM = 'HS256'
JWT_EXP_DELTA_SECONDS = 20

   def validate(self, data):
        user_obj = None
        email = data.get('email', None)
        username = data.get('username', None)
        password = data.get('password')
        if not email and not username:
            raise ValidationError("email or username is required!")
        if '@' in username:
            email = username
        user = User.objects.filter(
            Q(email=email) |
            Q(username=username)
        ).distinct()

        # user = user.exclude(email__isnull=True).exclude(email__iexact='')
        if user.exists() and user.count() == 1:
            user_obj = user.first()
        else:
            raise ValidationError("this username/email is not valid")
        if user_obj:
            if not user_obj.check_password(password):
                raise ValidationError("password is incorrect")

        # payload_handler(user)
        # payload = payload_handler(user_obj)

        payload = {
            'user_id': user_obj.id,
            'is_user': True,
        }
        jwt_token = jwt.encode(payload, JWT_SECRET, JWT_ALGORITHM)
        # code = json_response({'token': jwt_token.decode('utf-8')})

        data['token'] = jwt_token
        return data

jwt 设置:

JWT_AUTH = {
    'JWT_SECRET_KEY': SECRET_KEY,
    'JWT_ALGORITHM': 'RS256',
    'JWT_AUTH_HEADER_PREFIX': 'Bearer',
    'JWT_EXPIRATION_DELTA': datetime.timedelta(seconds=6600),

}

【问题讨论】:

    标签: django django-rest-framework jwt django-rest-framework-jwt


    【解决方案1】:

    对于您的“逻辑函数”,您使用 HS256 算法,在您的“jwt 设置”中,您使用 RS256。我想这一定是个问题。

    【讨论】:

      猜你喜欢
      • 2018-02-03
      • 2015-10-19
      • 1970-01-01
      • 2015-08-13
      • 2019-02-25
      • 1970-01-01
      • 2021-03-02
      • 2018-02-07
      • 2018-11-25
      相关资源
      最近更新 更多