我有一些要求,我需要能够使用username/password
或api_key
对用户进行身份验证,并为两种情况返回JWT令牌。
我使用用户名/密码的方法:
if request.data['email'] and request.data['password']:
try:
user = User.objects.get(email=request.data['email'])
except User.DoesNotExist:
return Response({'Error': "Invalid username."}, status=status.HTTP_400_BAD_REQUEST)
if user:
if user.check_password(request.data['password']):
payload = jwt_payload_handler(user)
token = jwt_encode_handler(payload)
exp = datetime.now() + api_settings.JWT_EXPIRATION_DELTA
return Response({'token': token,
'exp': format(exp, 'U')},
status=status.HTTP_200_OK)
else:
return Response({'Error': "Invalid password."}, status=status.HTTP_400_BAD_REQUEST)
其中jwt_payload_handler
的实现方式为:
def jwt_payload_handler(user):
payload = {
"id": user.id,
"date": get_user_join_date(user),
"username": user.username, }
return payload
我的问题之一是,关键字用户名是否需要在有效负载中才能使令牌有效??
在api_key认为密钥与用户无关的情况下,什么是好的方法?
如果提供的api_key是正确的,我是否应该创建一个将在有效负载中使用的默认用户?
有什么建议吗?
答案 0 :(得分:0)
是的,您可以创建一个默认用户以与API密钥一起使用。当然,这将意味着在使用该API密钥的每个人之间共享数据,这在您的用例中可能很好。
请注意,仅使用一个API密钥存在一些安全隐患。如果API密钥被盗用,则需要向API的每个用户发送新密钥。考虑creating a separate API token for each consumer of your API,就像每个使用者都有自己的用户名/密码一样。这样,如果使用者破坏了其API令牌,则只需为该特定使用者生成一个新的令牌。