Cum de a asigura Superset '/autentificare/' endpoint

0

Problema

Recent m-am integrat superset cu cererea mea de web, astfel încât atunci când un utilizator care este autentificată de către cererea mea de web pot intra superset și a vizualiza/edita/crea tablouri de bord în funcție de rolul lor doar făcând clic pe link-ul nici măcar nu trebuie să te autentifici. Pentru a face acest lucru a trebuit să ocolească login pentru care m-am referit în acest articol.

Personalizat SecurityManager am folosit pentru a ocoli conectare

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)

Deci, în conformitate cu codul de mai sus folosind url-ul http://localhost:8088/login?username=John va autentifica utilizatorul John intern sau dacă utilizatorul John nu exista contul este creat cu un rol care este în funcție de rolul utilizatorului în aplicația web

Acum problema este cine poate ghici acest url http://localhost:8088/login?username=USER_NAME puteți crea un cont în superset, deci, cum pentru a proteja sau asigura acest lucru '/login' endpoint

1

Cel mai bun răspuns

0

Puteți utiliza API, astfel încât nu expune solicite detalii la adresa 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

În alte limbi

Această pagină este în alte limbi

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