Cómo proteger Superconjunto '/login/' extremo

0

Pregunta

Recientemente he integrado superconjunto con mi aplicación web, de modo que cuando un usuario que se ha autenticado por mi aplicación web puede entrar superconjunto y ver/editar/crear cuadros de mando basados en su función haciendo clic en el enlace de ninguna necesidad incluso de inicio de sesión. Para hacer esto tuve que omitir el inicio de sesión para la que me he referido en este artículo.

Personalizado SecurityManager he utilizado para la derivación de inicio de sesión

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)

Así que de acuerdo al código anterior utiliza la url http://localhost:8088/login?username=John será el inicio de sesión el usuario Juan internamente o si el usuario Juan no existe se crea la cuenta con algún papel que se basa en el papel de usuario en mi aplicación web

Ahora, el problema es quien puede adivinar esta url http://localhost:8088/login?username=USER_NAME puede crear su cuenta en superconjunto, entonces, ¿cómo proteger o asegurar esta '/login' extremo

1

Mejor respuesta

0

Puede utilizar la API de modo que usted no exponer a solicitar detalles sobre la dirección URL.

from flask_appbuilder.api import BaseApi, expose
from . import appbuilder

    class LoginApi(BaseApi):

    resource_name = "login"
    
    @expose('/loginapi/', methods=['GET','POST'])
    #@has_access
    
    def loginapi(self):
        if request.method == 'POST':
            username = request.json['username']
            password = request.json['password']



appbuilder.add_api(LoginApi)
2021-11-24 10:09:07

En otros idiomas

Esta página está en otros idiomas

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Slovenský
..................................................................................................................