Protección simple de nombre de usuario y contraseña de un servidor bokeh

Tengo una aplicación de servidor bokeh simple y quiero exponerla en un nodo de Azure basado en Linux. El servidor está en funcionamiento.

Mi pregunta es: ¿cómo proteger el contenido por nombre de usuario y contraseña? No necesito necesariamente la autenticación de los usuarios.

Mis ideas hasta ahora (no probadas, pueden no funcionar)

  1. Para crear una página de servidor bokeh adicional con un campo de texto.
  2. En la callback de un botón, para agregar la prueba si la contraseña se ajusta. Si lo hace, para redirigir a la página del servidor original. De lo contrario, informe al usuario acerca de las credenciales incorrectas.

    Puede intentar deshabilitar la generación de identificadores de sesión por el servidor bokeh y generarlos mediante una aplicación externa solo después de la autenticación del usuario:
    (Basado en esta parte de la documentación de bokeh)

    1. Generar clave secreta con el comando bokeh secret :
     $ bokeh secreto
     oIWDL7DVYCaBJG9eYQ2Wvf2f2uhOAIM8xNS8Kds3eizV
    
    1. Establezca la variable de entorno BOKEH_SECRET_KEY en el valor generado;
      $ export BOKEH_SECRET_KEY = oIWDL7DVYCaBJG9eYQ2Wvf2f2uhOAIM8xNS8Kds3eizV 
    1. Establecer otra variable de entorno:
      $ export BOKEH_SIGN_SESSIONS = True 
    1. Ejecute el servidor bokeh con --session-ids external-signed argumento con --session-ids external-signed :
      $ bokeh serve myApp --session-ids con firma externa 

    En este modo, el usuario debe proporcionar una identificación de sesión válida (firmada) para acceder al servidor bokeh.

    1. Ejecute un proceso externo simple para solicitar a los usuarios el inicio de sesión y la contraseña, y generar ID para ellos. Aquí está el ejemplo basado en un fragmento de la documentación de Flask:
     from functools import wraps from flask import request, Response, redirect, Flask from bokeh.util import session_id app = Flask(__name__) def check_auth(username, password): return username == 'valid_user' and password == 'valid_password' def authenticate(): """Sends a 401 response that enables basic auth""" return Response( 'Could not verify your access level for that URL.\n' 'You have to login with proper credentials', 401, {'WWW-Authenticate': 'Basic realm="Login Required"'}) def requires_auth(f): @wraps(f) def decorated(*args, **kwargs): auth = request.authorization if not auth or not check_auth(auth.username, auth.password): return authenticate() return f(*args, **kwargs) return decorated @app.route('/') @requires_auth def redirect_to_bokeh(): s_id = session_id.generate_session_id() return redirect("http://:/?bokeh-session-id={}".format(s_id), code=302) if __name__ == "__main__": app.run() 
    1. Ahora, para acceder al usuario del servidor bokeh, debe ir a la aplicación Flask y especificar el inicio de sesión y la contraseña.