Недавно я интегрировал надмножество со своим веб-приложением, чтобы, когда пользователь, прошедший проверку подлинности с помощью моего веб-приложения, может войти в надмножество и просматривать/редактировать/создавать панели мониторинга в зависимости от их роли, просто нажав на ссылку, даже не нужно входить в систему. Для этого мне пришлось обойти логин, на который я ссылался в этой статье.
Пользовательский менеджер безопасности, который я использовал для обхода входа в систему
class CustomAuthDBView(AuthDBView):
@expose('/login/', methods=['GET', 'POST'])
def login(self):
redirect_url = self.appbuilder.get_url_for_index
user_name = request.args.get('username')
user_role = request.args.get('role')
if user_name is not None:
user = self.appbuilder.sm.find_user(username=user_name)
if not user:
role = self.appbuilder.sm.find_role(user_role)
user = self.appbuilder.sm.add_user(user_name, user_name, 'last_name', user_name + "@domain.com", role, password = "password")
if user:
login_user(user, remember=False)
return redirect(redirect_url)
else:
print('Unable to auto login', 'warning')
return super(CustomAuthDBView,self).login()
class CustomSecurityManager(SupersetSecurityManager):
authdbview = CustomAuthDBView
def __init__(self, appbuilder):
super(CustomSecurityManager, self).__init__(appbuilder)
Итак, в соответствии с приведенным выше кодом, используя url http://localhost:8088/login?username=John
будет ли пользователь Джон входить в систему внутренне или, если пользователь Джон не существует, учетная запись создается с некоторой ролью, основанной на роли пользователя в моем веб-приложении
Теперь проблема в том, что любой, кто может угадать этот URL-адрес http://localhost:8088/login?username=USER_NAME
могут создать свою учетную запись в суперсете, так как это можно защитить или обезопасить '/login'
конечная точка