我正在使用基于 Django 令牌的身份验证。(JWT Token 由 AWS Cognito 等第三方服务生成,我们将仅验证签名和到期时间)。
这个 REST 应用程序将没有任何用户模型,使用 API 调用的人只需要通过 JWT 令牌进行身份验证。
class JSONWebTokenAuthentication(TokenAuthentication):
def authenticate_credentials(self, jwtToken):
try:
payload = jwt.decode(jwtToken, secret_key,verify=True)
# user = User.objects.get(username='root')
user = AnonymousUser()
except (jwt.DecodeError, User.DoesNotExist):
raise exceptions.AuthenticationFailed('Invalid token')
except jwt.ExpiredSignatureError:
raise exceptions.AuthenticationFailed('Token has expired')
return (user, payload)
Run Code Online (Sandbox Code Playgroud)
在视图中:
@api_view(["POST"])
@authentication_classes((JSONWebTokenAuthentication,))
@permission_classes((AllowAny,))
Run Code Online (Sandbox Code Playgroud)
上述过程根本没有跟踪Token。有/没有令牌,API 调用正在工作。如果我进行以下两项更改,则它正在工作。
user = User.objects.get(username='root')
#user = AnonymousUser()
@permission_classes((IsAuthenticated,))
Run Code Online (Sandbox Code Playgroud)
一种方法是,在我的应用程序中至少有一个用户并引用该用户[此网络应用程序可能会在需要时扩展到任意数量的实例,因此必须自动插入具有相同“用户名”的同一用户。]。但是,我可以消除身份验证中的“用户”概念吗?
django django-authentication jwt django-rest-framework pyjwt