Skip to content
Tutoriales
Streamlit
Streamlit-Authenticator: How to Secure User Authentication in Streamlit Apps

Streamlit-Authenticator: Cómo asegurar la autenticación de usuarios en aplicaciones de Streamlit

Streamlit ha revolucionado la forma en que desarrollamos y desplegamos aplicaciones en la nube desde su inicio en 2019. Sin embargo, a medida que se ha vuelto más evidente la necesidad de autenticación segura de usuarios en las aplicaciones de Streamlit, ha surgido una solución en forma de Streamlit-Authenticator. Este artículo proporcionará una guía completa sobre cómo usar Streamlit-Authenticator para agregar autenticación segura de usuarios a tus aplicaciones de Streamlit.

¿Qué es Streamlit-Authenticator?

Streamlit-Authenticator es un módulo de autenticación seguro que te permite validar las credenciales de los usuarios en tu aplicación de Streamlit. Con características como restablecimiento de contraseñas, registro de nuevos usuarios y widgets de contraseña y nombre de usuario olvidados, Streamlit-Authenticator asegura que tu aplicación sea segura y accesible solo para usuarios autorizados. Es importante tener en cuenta que si bien esta técnica agrega cierto nivel de seguridad, no es comparable a una autenticación adecuada con un proveedor de SSO.

¿Has oído hablar de esta increíble herramienta de análisis y visualización de datos, que convierte tu aplicación de Streamlit en Tableau?

PyGWalker (opens in a new tab) es una biblioteca de Python que te ayuda a incorporar fácilmente una interfaz similar a Tableau en tu propia aplicación de Streamlit sin esfuerzo. Mira este increíble video producido por Sven de Coding is Fun (opens in a new tab) que muestra los pasos detallados para potenciar tu aplicación de Streamlit con esta poderosa Biblioteca de visualización de datos en Python!


Un agradecimiento especial a Sven y su gran contribución (opens in a new tab) a la comunidad de PyGWalker!

Además, también puedes consultar la página de GitHub de PyGWalker (opens in a new tab) para obtener más ejemplos de PyGWalker.

Instalación y configuración de Streamlit-Authenticator

Streamlit-Authenticator es una herramienta potente que se puede integrar fácilmente en tu aplicación de Streamlit. Sin embargo, antes de poder comenzar a usarlo, debes instalarlo y configurarlo. Este proceso es sencillo y se puede realizar en unos pocos pasos.

Cómo instalar Streamlit-Authenticator

Instalar Streamlit-Authenticator es tan sencillo como ejecutar un comando pip install en tu terminal. Así es cómo puedes hacerlo:

pip install streamlit-authenticator

Este comando le indica a pip, el instalador de paquetes de Python, que descargue e instale Streamlit-Authenticator desde el Índice de paquetes de Python (PyPI). Una vez que la instalación esté completa, puedes importar Streamlit-Authenticator en tu aplicación de Streamlit como cualquier otro paquete de Python.

Configuración de Streamlit-Authenticator

Después de instalar Streamlit-Authenticator, el siguiente paso es configurarlo. Esto implica configurar Streamlit-Authenticator para que funcione con tu aplicación de Streamlit específica. Aquí tienes una guía paso a paso sobre cómo hacerlo:

  1. Importa Streamlit-Authenticator en tu aplicación de Streamlit:
import streamlit_authenticator as sa
  1. Inicializa Streamlit-Authenticator con la configuración específica de tu aplicación:
auth = sa.Authenticator(
    SECRET_KEY,
    token_url="/token",
    token_ttl=3600,
    password_hashing_method=sa.PasswordHashingMethod.BCRYPT,
)
  1. Utiliza el decorador auth.login_required para proteger tus rutas de Streamlit:
@auth.login_required
def protected():
    st.write("Esta es una ruta protegida.")

Implementación de la autenticación de usuarios en Streamlit con Streamlit-Authenticator

Ahora que has instalado y configurado Streamlit-Authenticator, es hora de agregar un servicio de autenticación de usuarios a tu aplicación de Streamlit. Esto implica crear formularios de inicio de sesión y registro, manejar sesiones de usuario y más.

Agregar un servicio de autenticación de usuarios en Streamlit

Para agregar un servicio de autenticación de usuarios en Streamlit, debes crear un formulario de inicio de sesión donde los usuarios puedan ingresar sus credenciales. Aquí tienes un ejemplo de cómo puedes hacer esto usando Streamlit-Authenticator:

@st.route("/login")
def login():
    username = st.text_input("Nombre de usuario")
    password = st.text_input("Contraseña", type="password")
 
    if st.button("Iniciar sesión"):
        user = auth.authenticate(username, password)
        if user is not None:
            auth.login_user(user)
            st.success("Inició sesión exitosamente.")
        else:
            st.error("Nombre de usuario o contraseña no válidos.")

Implementación de la autenticación de usuarios sin SSO

Si no puedes implementar el inicio de sesión único (SSO), no te preocupes. Streamlit-Authenticator te permite agregar autenticación básica a tu aplicación de Streamlit sin SSO. Esto implica crear una contraseña global que se comparte entre todos los usuarios. Esto es cómo puedes hacerlo:

## .streamlit/secrets.toml
password = "streamlit123"

Luego, en tu aplicación de Streamlit, puedes verificar la contraseña ingresada con respecto a la contraseña almacenada:

password = st.text_input("Contraseña", type="password")
 
if password == st.secrets["password"]:
    st.success("Acceso concedido.")
else:
    st.error("Acceso denegado.")

Entendiendo la gestión de secretos de Streamlit

La función de manejo de secretos de Streamlit juega un papel crucial en la autenticación de usuarios. Permite almacenar de forma segura información sensible, como contraseñas y claves de API, fuera de su código. Esto es esencial para mantener la seguridad de su aplicación de Streamlit y la privacidad de sus usuarios.

Lamento la confusión anterior. Sumerjámonos más en cada sección con más detalles, ejemplos y datos.

Funciones avanzadas de Streamlit-Authenticator

Streamlit-Authenticator no se trata solo de autenticación básica de usuarios. Viene equipado con varias funciones avanzadas que brindan una solución integral para la gestión de usuarios en sus aplicaciones de Streamlit. Estas funciones incluyen widgets para restablecimiento de contraseñas, registro de nuevos usuarios y manejo de situaciones de contraseña y nombre de usuario olvidados. Exploraremos cada una de estas funciones en detalle.

Creación de un widget de restablecimiento de contraseña

Una de las características clave de Streamlit-Authenticator es la capacidad de crear un widget de restablecimiento de contraseña. Esta es una función esencial para cualquier aplicación que maneje la autenticación de usuarios. Aquí hay una guía paso a paso sobre cómo puede crear un widget de restablecimiento de contraseña usando Streamlit-Authenticator:

  1. Primero, cree una nueva ruta en su aplicación de Streamlit para el formulario de restablecimiento de contraseña:
@st.route("/restablecer-contraseña")
def restablecer_contraseña():
    ...
  1. Dentro de esta ruta, cree un formulario donde los usuarios puedan ingresar su dirección de correo electrónico:
email = st.text_input("Ingrese su dirección de correo electrónico")
if st.button("Restablecer Contraseña"):
    ...
  1. Cuando el usuario envíe el formulario, use Streamlit-Authenticator para generar un enlace de restablecimiento de contraseña:
enlace_restablecimiento = auth.generar_enlace_restablecimiento_contraseña(email)
  1. Finalmente, envíe este enlace a la dirección de correo electrónico del usuario. Puede usar cualquier biblioteca de correo electrónico en Python, como smtplib o yagmail, para enviar el correo electrónico.

Creación de un Widget de Registro de Nuevo Usuario

Streamlit-Authenticator facilita agregar un widget de registro de nuevo usuario a su aplicación de Streamlit. Este widget permite que los nuevos usuarios creen una cuenta ingresando su nombre de usuario y contraseña deseado. Así es cómo puede crear un widget de registro de nuevo usuario usando Streamlit-Authenticator:

  1. Cree una nueva ruta en su aplicación de Streamlit para el formulario de registro:
@st.route("/registrarse")
def registrarse():
    ...
  1. Dentro de esta ruta, cree un formulario donde los usuarios puedan ingresar su nombre de usuario y contraseña deseado:
nombre_usuario = st.text_input("Elija un nombre de usuario")
contraseña = st.text_input("Elija una contraseña", type="password")
if st.button("Registrarse"):
    ...
  1. Cuando el usuario envíe el formulario, use Streamlit-Authenticator para crear una nueva cuenta de usuario con las credenciales ingresadas:
usuario = auth.crear_usuario(nombre_usuario, contraseña)
st.success("Cuenta creada exitosamente.")

Creación de un Widget de Contraseña Olvidada

Si un usuario olvida su contraseña, un widget de contraseña olvidada puede ser de gran ayuda. Este widget permite que los usuarios restablezcan su contraseña ingresando su dirección de correo electrónico. Así es cómo puede crear un widget de contraseña olvidada usando Streamlit-Authenticator:

  1. Cree una nueva ruta en su aplicación de Streamlit para el formulario de contraseña olvidada:
@st.route("/olvide-contraseña")
def olvide_contraseña():
    ...
  1. Dentro de esta ruta, cree un formulario donde los usuarios puedan ingresar su dirección de correo electrónico:
email = st.text_input("Ingrese su dirección de correo electrónico")
if st.button("Restablecer Contraseña"):
    ...
  1. Cuando el usuario envíe el formulario, use Streamlit-Authenticator para generar un enlace de restablecimiento de contraseña y enviarlo a la dirección de correo electrónico del usuario.

Creación de un Widget de Nombre de Usuario Olvidado

Al igual que el widget de contraseña olvidada, un widget de nombre de usuario olvidado también puede ser útil para los usuarios que olvidan sus nombres de usuario. Este widget permite que los usuarios recuperen su nombre de usuario ingresando su dirección de correo electrónico. Así es cómo puede crear un widget de nombre de usuario olvidado usando Streamlit-Authenticator:

  1. Cree una nueva ruta en su aplicación de Streamlit para el formulario de nombre de usuario olvidado:
@st.route("/olvide-nombre-usuario")
def olvide_nombre_usuario():
    ...
  1. Dentro de esta ruta, cree un formulario donde los usuarios puedan ingresar su dirección de correo electrónico:
email = st.text_input("Ingrese su dirección de correo electrónico")
if st.button("Recuperar Nombre de Usuario"):
    ...
  1. Cuando el usuario envíe el formulario, use Streamlit-Authenticator para recuperar el nombre de usuario del usuario y enviarlo a la dirección de correo electrónico del usuario.
nombre_usuario = auth.obtener_nombre_usuario(email)
st.success(f"Su nombre de usuario es {nombre_usuario}.")

Estas funciones avanzadas de Streamlit-Authenticator lo convierten en una solución integral para la autenticación de usuarios en aplicaciones de Streamlit. Al utilizar estas funciones, puede garantizar que su aplicación no solo sea segura, sino también fácil de usar.

Streamlit-Authenticator: Más allá de la autenticación básica

Si bien Streamlit-Authenticator proporciona una solución sólida para la autenticación de usuarios, también ofrece una variedad de funciones adicionales que pueden mejorar la experiencia del usuario y agilizar la gestión de usuarios. Estas funciones, como roles y permisos de usuario, autenticación de múltiples factores e integración con proveedores de autenticación de terceros, pueden agregar una capa adicional de seguridad y flexibilidad a sus aplicaciones de Streamlit.

  • Roles y permisos de usuario: Streamlit-Authenticator admite roles y permisos de usuario, lo que le permite controlar lo que cada usuario puede y no puede hacer en su aplicación. Por ejemplo, puedes crear roles para administradores, editores y espectadores, cada uno con diferentes permisos. Esto puede ser especialmente útil para aplicaciones que tienen diferentes tipos de usuarios con diferentes necesidades y responsabilidades.

  • Autenticación de múltiples factores: Para mayor seguridad, Streamlit-Authenticator admite autenticación de múltiples factores (MFA). Con MFA, se requiere que los usuarios proporcionen dos o más elementos de prueba (o factores) para autenticarse. Estos factores pueden incluir algo que saben (como una contraseña), algo que tienen (como un token físico o un teléfono inteligente) o algo que son (como una huella dactilar u otros datos biométricos).

  • Integración con proveedores de autenticación de terceros: Streamlit-Authenticator también se puede integrar con proveedores de autenticación de terceros, como Google, Facebook y Twitter. Esto permite a los usuarios iniciar sesión en su aplicación utilizando sus cuentas existentes en estas plataformas, lo que hace que el proceso de inicio de sesión sea más rápido y conveniente.

Conclusión

Streamlit-Authenticator proporciona una solución completa para la autenticación de usuarios en aplicaciones de Streamlit. Desde características básicas de autenticación como inicio de sesión y registro hasta características avanzadas como restablecimiento de contraseña, roles y permisos de usuario, autenticación de múltiples factores e integración con proveedores de terceros, Streamlit-Authenticator tiene todo lo que necesita para asegurar su aplicación y proporcionar una experiencia de usuario fluida.

Sin embargo, vale la pena mencionar que si bien Streamlit-Authenticator es una herramienta poderosa, no está exenta de desventajas. Por ejemplo, puede que no sea adecuado para aplicaciones que requieren un alto nivel de seguridad, como aplicaciones bancarias o de atención médica. Además, aunque es relativamente fácil de configurar, requiere ciertos conocimientos de Python y desarrollo web.

A pesar de estos posibles inconvenientes, Streamlit-Authenticator sigue siendo una opción popular para la autenticación de usuarios en aplicaciones de Streamlit debido a su facilidad de uso, flexibilidad y conjunto robusto de características.

¿Has oído hablar de esta increíble herramienta de análisis de datos y visualización de datos que convierte tu aplicación Streamlit en Tableau?

PyGWalker (opens in a new tab) es una biblioteca de Python que te ayuda a incorporar fácilmente una interfaz similar a Tableau en tu propia aplicación Streamlit sin esfuerzo.

PyGWalker para visualización de datos en Streamlit (opens in a new tab)

Preguntas frecuentes

P: ¿Cómo autentico Streamlit?

R: Puedes autenticar Streamlit utilizando Streamlit-Authenticator, un módulo de autenticación segura que te permite validar las credenciales de los usuarios en tu aplicación de Streamlit. Proporciona funciones como restablecimiento de contraseña, registro de nuevos usuarios y widgets de contraseña y nombre de usuario olvidados.

P: ¿Cómo añado autenticación de usuarios a Streamlit?

R: Puedes añadir autenticación de usuarios a Streamlit instalando y configurando Streamlit-Authenticator. Una vez configurado, puedes utilizarlo para crear formularios de inicio de sesión y registro, gestionar sesiones de usuarios y más.

P: ¿Qué es Streamlit Authenticator?

R: Streamlit-Authenticator es un módulo de autenticación segura para aplicaciones de Streamlit. Te permite validar las credenciales de los usuarios, gestionar sesiones de usuarios y proporcionar funciones como restablecimiento de contraseña, registro de nuevos usuarios y widgets de contraseña y nombre de usuario olvidados.

P: ¿Cuáles son las desventajas de Streamlit?

R: Si bien Streamlit es una herramienta poderosa para crear aplicaciones de datos, también tiene algunas desventajas. Por ejemplo, puede que no sea adecuado para aplicaciones que requieren un alto nivel de seguridad, como aplicaciones bancarias o de atención médica. Además, aunque es relativamente fácil de configurar, requiere ciertos conocimientos de Python y desarrollo web.