Django + Dash, безопасно, без Enterprise лицензии -- совсем никак?
Что-то сижу и туплю.
Есть сайт на Джанго с аутентификацией, разграничением прав доступа и прочими радостями. Есть желание встроить в него дашборд, причем тоже с ограниченным доступом. Есть Dash, на котором можно сделать такой дашборд, но у него "внутре" flask. Чтобы подружить их друг с другом в документации предлагают iframe, но мне нужно 100% отсечь доступ для всех, кроме определенной группы пользователей (информация финансовая, всем подряд ее видеть не нужно). Безопасное встраивание обещают в Enterprise версии, но мне на нее денег не дадут.
Пока единственное, что приходило в голову это таки делать iframe, но данные для него подтягивать из Django-части через REST и там отдавать только через @login_required и проверку прав, но сильно сомневаюсь, что такой запрос пойдет от имени залогиненного пользователя (да, я плохо разбираюсь в веб-технологиях, это не моя основная работа, к сожалению).
Можете подсказать куда копать? Или никак не выйдет? Сейчас выбор стоит разбираться с Dash или сразу искать другие варианты и не хочется терять время, пиная мертвую лошадь.
Ну сделайте авторизацию через токен, прокидывайте его в get-параметрах к фрейму. Если там фласк, и можете в нем писать, как раз получите токен, и если все ок - рендеретесь.
Владимир, нет, не CSRF. Можете придумать что угодно, например:
1. Взять JWT токен с симметричным ключом, для примера, ключ будут знать только Django и Dash, ссылка на пример - https://pyjwt.readthedocs.io/en/latest/#example-usage
2. На стороне Django, если пользователь залогинен и хочет запросить фрейм, генерируете ему такой токен, данные можете туда добавить любые по вкусу, например user_id какой-нибудь:
4. На стороне Dash вам придет запрос с этим токеном, вы с помощью ключа декодируйте (по сути подпись проверяете, что она валидна) и тогда можно рендерить содержимое фрейма.
Владимир, а ещё я кажется не внимательно прочитал вопрос, и предложил сложное решение, если у вас есть разграничении прав в джанге, то можно конечно же, рендерить фрейм только для пользоателей с нужными правами. Но если вы беспокоитесь о том, что кто-то даст ссылку на айфрем, другому человеку, и сама по себе ссылка никак не защищает, то тогда нужно делать что-то вроде того, что я описал.