我正在构建一个烧瓶API,该API将操纵将在物联网中使用的数据。
长话短说,客户可以通过Thingsboard登录,并从中获得jwt。
但是API拒绝jwt表示签名验证失败。
双方都使用相同的密钥。
这两个东西都在远程服务器上,API在开发过程中目前是本地的。
jwt操作的新手,我想念什么?
答案 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