Hey I'm looking for the correct way to implement saving JWT tokens in httpOnly cookies using JWT
I'm not sure if thing I did is right.
Changed Default authentication class in setting.py and added cookies settings
REST_FRAMEWORK = {
"DEFAULT_AUTHENTICATION_CLASSES": (
"authorization.authentication.JWTCookiesAuthentication",
),
}
SIMPLE_JWT = {
...
"AUTH_COOKIE": "access_token", # Cookie name. Enables cookies if value is set.
"AUTH_COOKIE_DOMAIN": None, # A string like "example.com", or None for standard domain cookie.
"AUTH_COOKIE_SECURE": False, # Whether the auth cookies should be secure (https:// only).
"AUTH_COOKIE_HTTP_ONLY": True, # Http only cookie flag.It's not fetch by javascript.
"AUTH_COOKIE_PATH": "/", # The path of the auth cookie.
"AUTH_COOKIE_SAMESITE": "Lax",
}
Created custom authentication backend in authentication.py
class JWTCookiesAuthentication(JWTAuthentication):
def authenticate(self, request):
header = self.get_header(request)
if header is None:
raw_token = request.COOKIES.get(settings.SIMPLE_JWT['AUTH_COOKIE']) or None
else:
raw_token = self.get_raw_token(header)
if raw_token is None:
return None
validated_token = self.get_validated_token(raw_token)
return self.get_user(validated_token), validated_token
and added cookies in response in my view
class EmailTokenObtainPairView(TokenViewBase):
serializer_class = CustomTokenObtainPairSerializer
def post(self, request, *args, **kwargs):
serializer = self.get_serializer(data=request.data)
try:
serializer.is_valid(raise_exception=True)
except AuthenticationFailed:
raise InActiveUser()
except TokenError:
raise InvalidToken()
response = Response(serializer.validated_data, status=status.HTTP_200_OK)
response.set_cookie(
key=settings.SIMPLE_JWT["AUTH_COOKIE"],
value=serializer.validated_data["access"],
expires=settings.SIMPLE_JWT["ACCESS_TOKEN_LIFETIME"],
secure=settings.SIMPLE_JWT["AUTH_COOKIE_SECURE"],
httponly=settings.SIMPLE_JWT["AUTH_COOKIE_HTTP_ONLY"],
samesite=settings.SIMPLE_JWT["AUTH_COOKIE_SAMESITE"],
)
return response
But what about refresh token and will that handle requests? Will it use cookies while sending request? Also what about using my custom backend in drf-spectacular?
Thank you.