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

Streamlit-Authenticator: Comment sécuriser l'authentification des utilisateurs dans les applications Streamlit

Streamlit a révolutionné la façon dont nous développons et déployons des applications dans le cloud depuis sa création en 2019. Cependant, à mesure que le besoin d'authentification sécurisée des utilisateurs dans les applications Streamlit est devenu plus apparent, une solution a émergé sous la forme de Streamlit-Authenticator. Cet article fournit un guide complet sur l'utilisation de Streamlit-Authenticator pour ajouter une authentification sécurisée des utilisateurs à vos applications Streamlit.

Qu'est-ce que Streamlit-Authenticator ?

Streamlit-Authenticator est un module d'authentification sécurisé qui vous permet de valider les informations d'identification des utilisateurs dans votre application Streamlit. Avec des fonctionnalités telles que la réinitialisation des mots de passe, l'enregistrement de nouveaux utilisateurs et des widgets pour les mots de passe et les noms d'utilisateur oubliés, Streamlit-Authenticator garantit que votre application est sécurisée et accessible uniquement aux utilisateurs autorisés. Il est important de noter que bien que cette technique ajoute un certain niveau de sécurité, elle n'est pas comparable à une authentification correcte avec un fournisseur SSO.

Avez-vous entendu parler de cet outil incroyable d'analyse et de visualisation des données, qui transforme votre application Streamlit en Tableau ?

PyGWalker (opens in a new tab) est une bibliothèque Python qui vous permet d'intégrer facilement une interface similaire à Tableau dans votre propre application Streamlit sans effort. Regardez cette vidéo incroyable produite par Sven de Coding is Fun (opens in a new tab) qui démontre les étapes détaillées pour donner à votre application Streamlit le pouvoir de cette puissante bibliothèque de visualisation des données en Python !


Un grand merci à Sven et à sa contribution géniale (opens in a new tab) à la communauté PyGWalker !

De plus, vous pouvez également consulter la page GitHub de PyGWalker (opens in a new tab) pour plus d'exemples de PyGWalker.

Installation et configuration de Streamlit-Authenticator

Streamlit-Authenticator est un outil puissant qui peut être facilement intégré à votre application Streamlit. Cependant, avant de pouvoir l'utiliser, vous devez l'installer et le configurer. Ce processus est simple et peut être réalisé en quelques étapes.

Comment installer Streamlit-Authenticator

L'installation de Streamlit-Authenticator est aussi simple que d'exécuter une commande d'installation pip dans votre terminal. Voici comment vous pouvez le faire:

pip install streamlit-authenticator

Cette commande indique à pip, l'installateur de packages Python, de télécharger et d'installer Streamlit-Authenticator depuis l'Index des Packages Python (PyPI). Une fois l'installation terminée, vous pouvez importer Streamlit-Authenticator dans votre application Streamlit comme n'importe quel autre package Python.

Configuration de Streamlit-Authenticator

Après avoir installé Streamlit-Authenticator, la prochaine étape consiste à le configurer. Cela implique de configurer Streamlit-Authenticator pour qu'il fonctionne avec votre application Streamlit spécifique. Voici un guide étape par étape sur la façon de le faire :

  1. Importez Streamlit-Authenticator dans votre application Streamlit :
import streamlit_authenticator as sa
  1. Initialisez Streamlit-Authenticator avec les paramètres spécifiques de votre application :
auth = sa.Authenticator(
    SECRET_KEY,
    token_url="/token",
    token_ttl=3600,
    password_hashing_method=sa.PasswordHashingMethod.BCRYPT,
)
  1. Utilisez le décorateur auth.login_required pour protéger vos itinéraires Streamlit :
@auth.login_required
def protected():
    st.write("Il s'agit d'un itinéraire protégé.")

Mise en œuvre de l'authentification des utilisateurs dans Streamlit avec Streamlit-Authenticator

Maintenant que vous avez installé et configuré Streamlit-Authenticator, il est temps d'ajouter un service d'authentification des utilisateurs à votre application Streamlit. Cela implique de créer des formulaires de connexion et d'inscription, de gérer les sessions utilisateur, et plus encore.

Ajout d'un service d'authentification des utilisateurs dans Streamlit

Pour ajouter un service d'authentification des utilisateurs dans Streamlit, vous devez créer un formulaire de connexion où les utilisateurs peuvent saisir leurs informations d'identification. Voici un exemple de la façon dont vous pouvez le faire en utilisant Streamlit-Authenticator :

@st.route("/login")
def login():
    username = st.text_input("Nom d'utilisateur")
    password = st.text_input("Mot de passe", type="password")
 
    if st.button("Connexion"):
        user = auth.authenticate(username, password)
        if user is not None:
            auth.login_user(user)
            st.success("Connexion réussie.")
        else:
            st.error("Nom d'utilisateur ou mot de passe incorrect.")

Mise en œuvre de l'authentification des utilisateurs sans SSO

Si vous ne pouvez pas mettre en œuvre la connexion unique (SSO), ne vous inquiétez pas. Streamlit-Authenticator vous permet d'ajouter une authentification de base à votre application Streamlit sans SSO. Cela implique de créer un mot de passe global partagé entre tous les utilisateurs. Voici comment vous pouvez le faire :

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

Ensuite, dans votre application Streamlit, vous pouvez vérifier le mot de passe saisi par rapport au mot de passe stocké :

password = st.text_input("Mot de passe", type="password")
 
if password == st.secrets["password"]:
    st.success("Accès autorisé.")
else:
    st.error("Accès refusé.")

Compréhension de la gestion des secrets de Streamlit

La fonction de gestion des secrets de Streamlit joue un rôle crucial dans l'authentification des utilisateurs. Elle vous permet de stocker en toute sécurité des informations sensibles, telles que des mots de passe et des clés API, en dehors de votre code. Cela est essentiel pour maintenir la sécurité de votre application Streamlit et la confidentialité de vos utilisateurs.

Je m'excuse pour la confusion précédente. Plongeons plus en détail dans chaque section avec plus de détails, d'exemples et de faits.

Fonctionnalités avancées de Streamlit-Authenticator

Streamlit-Authenticator ne se limite pas à l'authentification utilisateur de base. Il est équipé de plusieurs fonctionnalités avancées qui offrent une solution complète pour la gestion des utilisateurs dans vos applications Streamlit. Ces fonctionnalités comprennent des widgets pour la réinitialisation du mot de passe, l'enregistrement de nouveaux utilisateurs et la gestion des mots de passe oubliés et des noms d'utilisateur. Explorons chacune de ces fonctionnalités en détail.

Création d'un widget de réinitialisation de mot de passe

Une des fonctionnalités clés de Streamlit-Authenticator est la possibilité de créer un widget de réinitialisation de mot de passe. Il s'agit d'une fonctionnalité essentielle pour toute application qui gère l'authentification des utilisateurs. Voici un guide étape par étape sur la façon de créer un widget de réinitialisation de mot de passe à l'aide de Streamlit-Authenticator :

  1. Tout d'abord, créez une nouvelle route dans votre application Streamlit pour le formulaire de réinitialisation du mot de passe :
@st.route("/reinitialisation-mot-de-passe")
def reinitialisation_mot_de_passe():
    ...
  1. À l'intérieur de cette route, créez un formulaire où les utilisateurs peuvent saisir leur adresse e-mail :
email = st.text_input("Saisissez votre adresse e-mail")
if st.button("Réinitialiser le mot de passe"):
    ...
  1. Lorsque l'utilisateur soumet le formulaire, utilisez Streamlit-Authenticator pour générer un lien de réinitialisation de mot de passe :
lien_reinitialisation = auth.generer_lien_reinitialisation_mot_de_passe(email)
  1. Enfin, envoyez ce lien à l'adresse e-mail de l'utilisateur. Vous pouvez utiliser n'importe quelle bibliothèque de messagerie électronique en Python, comme smtplib ou yagmail, pour envoyer l'e-mail.

Création d'un widget d'enregistrement de nouvel utilisateur

Streamlit-Authenticator facilite l'ajout d'un widget d'enregistrement de nouvel utilisateur à votre application Streamlit. Ce widget permet aux nouveaux utilisateurs de créer un compte en saisissant leur nom d'utilisateur et leur mot de passe souhaités. Voici comment créer un widget d'enregistrement de nouvel utilisateur à l'aide de Streamlit-Authenticator :

  1. Créez une nouvelle route dans votre application Streamlit pour le formulaire d'enregistrement :
@st.route("/enregistrer")
def enregistrer():
    ...
  1. À l'intérieur de cette route, créez un formulaire où les utilisateurs peuvent saisir leur nom d'utilisateur et leur mot de passe souhaités :
nom_utilisateur = st.text_input("Choisissez un nom d'utilisateur")
mot_de_passe = st.text_input("Choisissez un mot de passe", type="password")
if st.button("S'inscrire"):
    ...
  1. Lorsque l'utilisateur soumet le formulaire, utilisez Streamlit-Authenticator pour créer un nouveau compte utilisateur avec les identifiants saisis :
utilisateur = auth.creer_utilisateur(nom_utilisateur, mot_de_passe)
st.success("Compte créé avec succès.")

Création d'un widget de mot de passe oublié

Si un utilisateur oublie son mot de passe, un widget de mot de passe oublié peut être très utile. Ce widget permet aux utilisateurs de réinitialiser leur mot de passe en saisissant leur adresse e-mail. Voici comment créer un widget de mot de passe oublié à l'aide de Streamlit-Authenticator :

  1. Créez une nouvelle route dans votre application Streamlit pour le formulaire de mot de passe oublié :
@st.route("/mot-de-passe-oublie")
def mot_de_passe_oublie():
    ...
  1. À l'intérieur de cette route, créez un formulaire où les utilisateurs peuvent saisir leur adresse e-mail :
email = st.text_input("Saisissez votre adresse e-mail")
if st.button("Réinitialiser le mot de passe"):
    ...
  1. Lorsque l'utilisateur soumet le formulaire, utilisez Streamlit-Authenticator pour générer un lien de réinitialisation du mot de passe et l'envoyer à l'adresse e-mail de l'utilisateur.

Création d'un widget de nom d'utilisateur oublié

Tout comme le widget de mot de passe oublié, un widget de nom d'utilisateur oublié peut également être utile aux utilisateurs qui oublient leur nom d'utilisateur. Ce widget permet aux utilisateurs de récupérer leur nom d'utilisateur en saisissant leur adresse e-mail. Voici comment créer un widget de nom d'utilisateur oublié à l'aide de Streamlit-Authenticator :

  1. Créez une nouvelle route dans votre application Streamlit pour le formulaire de nom d'utilisateur oublié :
@st.route("/nom-utilisateur-oublie")
def nom_utilisateur_oublie():
    ...
  1. À l'intérieur de cette route, créez un formulaire où les utilisateurs peuvent saisir leur adresse e-mail :
email = st.text_input("Saisissez votre adresse e-mail")
if st.button("Récupérer le nom d'utilisateur"):
    ...
  1. Lorsque l'utilisateur soumet le formulaire, utilisez Streamlit-Authenticator pour récupérer le nom d'utilisateur de l'utilisateur et l'envoyer à son adresse e-mail.
nom_utilisateur = auth.get_nom_utilisateur(email)
st.success(f"Votre nom d'utilisateur est {nom_utilisateur}.")

Ces fonctionnalités avancées de Streamlit-Authenticator en font une solution complète pour l'authentification des utilisateurs dans les applications Streamlit. En utilisant ces fonctionnalités, vous pouvez vous assurer que votre application est non seulement sécurisée, mais aussi conviviale.

Streamlit-Authenticator : Au-delà de l'authentification de base

Bien que Streamlit-Authenticator offre une solution robuste pour l'authentification des utilisateurs, il propose également une gamme de fonctionnalités supplémentaires qui peuvent améliorer l'expérience utilisateur et rationaliser la gestion des utilisateurs. Ces fonctionnalités, telles que les rôles et les autorisations des utilisateurs, l'authentification multifacteur et l'intégration avec des fournisseurs d'authentification tiers, peuvent ajouter une couche supplémentaire de sécurité et de flexibilité à vos applications Streamlit.

  • Rôles et autorisations des utilisateurs : Streamlit-Authenticator prend en charge les rôles et les autorisations des utilisateurs, ce qui vous permet de contrôler ce que chaque utilisateur peut et ne peut pas faire dans votre application. Par exemple, vous pouvez créer des rôles pour les administrateurs, les éditeurs et les visualisateurs, chacun ayant des autorisations différentes. Cela peut être particulièrement utile pour les applications qui ont différents types d'utilisateurs avec des besoins et des responsabilités différents.

  • Authentification multifacteur : Pour une sécurité accrue, Streamlit-Authenticator prend en charge l'authentification multifacteur (MFA). Avec MFA, les utilisateurs doivent fournir deux éléments de preuve ou plus (ou facteurs) pour s'authentifier. Ces facteurs peuvent comprendre quelque chose qu'ils connaissent (comme un mot de passe), quelque chose qu'ils possèdent (comme un jeton physique ou un smartphone) ou quelque chose qu'ils sont (comme une empreinte digitale ou d'autres données biométriques).

  • Intégration avec des fournisseurs d'authentification tiers: Streamlit-Authenticator peut également être intégré avec des fournisseurs d'authentification tiers, tels que Google, Facebook et Twitter. Cela permet aux utilisateurs de se connecter à votre application en utilisant leurs comptes existants sur ces plateformes, rendant le processus de connexion plus rapide et plus pratique.

Conclusion

Streamlit-Authenticator offre une solution complète pour l'authentification des utilisateurs dans les applications Streamlit. Des fonctionnalités d'authentification de base telles que la connexion et l'inscription aux fonctionnalités avancées telles que la réinitialisation du mot de passe, les rôles et les permissions des utilisateurs, l'authentification à plusieurs facteurs et l'intégration avec des fournisseurs tiers, Streamlit-Authenticator a tout ce dont vous avez besoin pour sécuriser votre application et offrir une expérience utilisateur fluide.

Cependant, il convient de noter que, bien que Streamlit-Authenticator soit un outil puissant, il n'est pas exempt de ses inconvénients. Par exemple, il peut ne pas convenir aux applications qui nécessitent un niveau élevé de sécurité, telles que les applications bancaires ou de santé. De plus, bien qu'il soit relativement facile à configurer, il nécessite des connaissances en Python et en développement web.

Malgré ces inconvénients potentiels, Streamlit-Authenticator reste un choix populaire pour l'authentification des utilisateurs dans les applications Streamlit en raison de sa facilité d'utilisation, de sa flexibilité et de son ensemble de fonctionnalités robuste.

Avez-vous entendu parler de cet outil incroyable d'analyse de données et de visualisation de données, qui transforme votre application Streamlit en Tableau ?

PyGWalker (opens in a new tab) est une bibliothèque Python qui vous aide à intégrer facilement une interface semblable à Tableau dans votre propre application Streamlit, sans effort.

PyGWalker pour la visualisation des données dans Streamlit (opens in a new tab)

Questions fréquemment posées

Q: Comment authentifier Streamlit ?

R: Vous pouvez authentifier Streamlit en utilisant Streamlit-Authenticator, un module d'authentification sécurisé qui vous permet de valider les informations d'identification de l'utilisateur dans votre application Streamlit. Il propose des fonctionnalités telles que la réinitialisation du mot de passe, l'inscription de nouveaux utilisateurs et des widgets pour les mots de passe et noms d'utilisateur oubliés.

Q: Comment ajouter une authentification utilisateur à Streamlit ?

R: Vous pouvez ajouter une authentification utilisateur à Streamlit en installant et en configurant Streamlit-Authenticator. Une fois configuré, vous pouvez l'utiliser pour créer des formulaires de connexion et d'inscription, gérer les sessions utilisateur, et bien plus encore.

Q: Qu'est-ce que l'authentificateur Streamlit ?

R: Streamlit-Authenticator est un module d'authentification sécurisé pour les applications Streamlit. Il vous permet de valider les informations d'identification de l'utilisateur, de gérer les sessions utilisateur et d'offrir des fonctionnalités telles que la réinitialisation du mot de passe, l'inscription de nouveaux utilisateurs, ainsi que des widgets pour les mots de passe et noms d'utilisateur oubliés.

Q: Quels sont les inconvénients de Streamlit ?

R: Bien que Streamlit soit un outil puissant pour créer des applications de données, il présente certains inconvénients. Par exemple, il peut ne pas convenir aux applications qui nécessitent un niveau élevé de sécurité, telles que les applications bancaires ou de santé. De plus, bien qu'il soit relativement facile à configurer, il nécessite des connaissances en Python et en développement web.