Как реализовать аутентификацию JWT для нескольких REST-сервисов в Django REST Framework?
В итоге у меня будет несколько микросервисов для этого проекта (расчет, клиент и другие). Рабочий процесс выглядит следующим образом: пользователь входит в систему, получает JWT, а затем совершает несколько обращений к различным сервисам до тех пор, пока срок действия токена не истек.
Я создал службу аутентификации в DRF, используя Simple JWT. Вызов токена и обновление работают отлично. Я совсем новичок в DRF, поэтому не знаю, как лучше это сделать. Как мне реализовать это так, чтобы другие сервисы знали, что токен действителен? Архитектурно каждый микросервис будет размещен в собственном контейнере в AWS. Можно ли для этого использовать управление API в AWS?
Любая помощь будет высоко оценена.
Вы можете использовать следующие подходы:
- Центральная служба аутентификации:
Настройте центральный сервис для генерации токенов с помощью
djangorestframework-simplejwt
. Вы можете добавить следующее в настройках SIMPLE_JWT в файле settings.py:
from rest_framework_simplejwt.views import TokenObtainPairView, TokenRefreshView urlpatterns = [ path('api/token/', TokenObtainPairView.as_view(), name='token_obtain_pair'), path('api/token/refresh/', TokenRefreshView.as_view(), name='token_refresh'), ]
- JWT Validation in Microservices: Здесь каждый микросервис будет оценивать токены, используя общий секретный или открытый ключ:
REST_FRAMEWORK = { 'DEFAULT_AUTHENTICATION_CLASSES': ( 'rest_framework_simplejwt.authentication.JWTAuthentication', ), }
- Передача JWT для межсервисного взаимодействия: Передача JWT-токена в качестве маркера Bearer в заголовке Auth при вызове другого сервиса:
headers = {'Authorization': f'Bearer {user_token}'} response = requests.get('http://service/api/resource/', headers=headers)