django rest框架使用jwt RS256解码签名错误
Posted
技术标签:
【中文标题】django rest框架使用jwt RS256解码签名错误【英文标题】:django rest framwork Error decoding signature with 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),
【问题讨论】:
【参考方案1】:对于您的“逻辑函数”,您使用 HS256 算法,在您的“jwt 设置”中,您使用 RS256。我想这一定是个问题。
【讨论】:
以上是关于django rest框架使用jwt RS256解码签名错误的主要内容,如果未能解决你的问题,请参考以下文章