我正在使用基于 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)
在视图中:
@api_view(["POST"])
@authentication_classes((JSONWebTokenAuthentication,))
@permission_classes((AllowAny,))
上述过程根本不跟踪 Token。有/无令牌,API 调用正在工作。如果我进行如下两项更改,则它正在工作。
user = User.objects.get(username='root')
#user = AnonymousUser()
@permission_classes((IsAuthenticated,))
一种方法是,在我的应用程序中至少拥有一个用户并引用该用户[此 Web 应用程序可能会在需要时扩展到任意数量的实例,因此必须自动插入具有相同“用户名”的同一用户。]。但是,我可以消除身份验证中的“用户”概念吗?