Я реализовал API бэкэнда, используя django. Подробности среды: as-
Среда: платформа: Linux (ubuntu) Framework: Django 1.11.28 Язык программирования: python 2.7.12 (в будущем планируется перенести 3.8) База данных: Mongodb 3.4
Описание: я разработал веб-сервисы, используя django. Это обычные веб-сервисы, а не Restful (ранее не было полной поддержки mongodb для Django rest framework), поэтому большинство вещей настроено не в соответствии со django стандартом.
Сведения о проблеме: Для аутентификации Я использую Azure AD. Я написал простой декоратор, который получает токен доступа из запроса, отправленного фронтальным веб-приложением / мобильным устройством, затем этот декоратор проверяет токен и возвращается к просмотру. Для аутентификации я использую пакет django -auth-adfs
декоратор
authorisation.py
def is_authorized(function):
@wraps(function)
def authorize(request, *args, **kwargs):
# access token validation logic
if validated(token):
# get user details from access token first_name, last_name etc
user_info = {"first_name":"foo","last_name":"bar"}
return function(request, *args, **kwargs)
else:
return HttpResponse('Unauthorized', status=401)
return authorize
View.py
@is_authorized
def home_view(request):
# calling function which decodes access token and return user details.
# This function contains same code as in decorator except function it returns user_info
**first_name, last_name = get_userinfo_from_access_token(request)**
return JsonResponse({"data":{"fname":first_name,"lname":last_name}})
Как видите, код получился грязным и повторяющимся. Здесь я не могу получить доступ к пользовательским данным, которые уже расшифрованы. Чтобы получить информацию о пользователе, я написал тот же код в функции get_userinfo_from_access_token (), передав объект запроса, я не думаю, что это не близко к «ok».
- Мне нужен подход, который соответствует стандарту django и сопровождается большинством django разработчиков. Требуется ли мне реализовать какой-либо аутентификационный бэкэнд или некоторое промежуточное ПО django, если да, пожалуйста, проведите меня через него.
Учитывая мой текущий сценарий и среду,
- Можете ли вы объяснить лучший и стандартный подход для доступа к пользовательским данным из объекта запроса
- Мною создано множество представлений, я добавляю декоратор is_authorized к каждому представлению. Существует ли какой-либо стандартный и лучший подход для защиты представления.
- Я планирую переписать весь код в будущем, используя django rest framework. Я буду очень благодарен, если кто-нибудь предоставит мне какую-либо справку или руководство по созданию спокойных веб-сервисов, чтобы я мог использовать свой существующий код и сократить свои усилия.
Пожалуйста, дайте мне знать, если мне что-то неясно и требуется больше деталей. Заранее спасибо.