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

Streamlit-Authenticator: Como Segurar a Autenticação do Usuário em Apps do Streamlit

O Streamlit revolucionou a forma como desenvolvemos e implantamos aplicativos na nuvem desde o seu lançamento em 2019. No entanto, à medida que a necessidade de autenticação segura de usuários em aplicativos do Streamlit se tornou mais aparente, uma solução surgiu na forma do Streamlit-Authenticator. Este artigo fornecerá um guia abrangente sobre como usar o Streamlit-Authenticator para adicionar autenticação segura de usuário aos seus aplicativos do Streamlit.

O que é o Streamlit-Authenticator?

O Streamlit-Authenticator é um módulo de autenticação segura que permite validar as credenciais do usuário em seu aplicativo Streamlit. Com recursos como redefinição de senha, registro de novos usuários e widgets de esquecimento de senha e nome de usuário, o Streamlit-Authenticator garante que seu aplicativo seja seguro e acessível apenas para usuários autorizados. É importante observar que, embora essa técnica adicione um certo nível de segurança, ela não é comparável à autenticação adequada com um provedor SSO.

Você já ouviu falar dessa incrível ferramenta de Análise de Dados e Visualização de Dados, que transforma seu aplicativo Streamlit em um Tableau?

PyGWalker (opens in a new tab) é uma biblioteca em Python que ajuda você a incorporar facilmente uma interface semelhante ao Tableau em seu próprio aplicativo Streamlit sem esforço. Confira este incrível vídeo produzido por Sven do Coding is Fun (opens in a new tab) que demonstra os passos detalhados para capacitar seu aplicativo Streamlit com esta poderosa Biblioteca de Visualização de Dados em Python!


Agradecimentos especiais a Sven e sua grande contribuição (opens in a new tab) para a comunidade do PyGWalker!

Além disso, você também pode conferir a Página do GitHub do PyGWalker (opens in a new tab) para mais exemplos do PyGWalker.

Instalação e Configuração do Streamlit-Authenticator

O Streamlit-Authenticator é uma ferramenta poderosa que pode ser facilmente integrada ao seu aplicativo Streamlit. No entanto, antes de começar a usá-lo, você precisa instalá-lo e configurá-lo. Esse processo é simples e pode ser concluído em algumas etapas.

Como Instalar o Streamlit-Authenticator

A instalação do Streamlit-Authenticator é tão simples quanto executar um comando de instalação do pip em seu terminal. Veja como você pode fazer isso:

pip install streamlit-authenticator

Este comando diz ao pip, instalador de pacotes Python, para baixar e instalar o Streamlit-Authenticator do Python Package Index (PyPI). Após a instalação ser concluída, você pode importar o Streamlit-Authenticator em seu aplicativo Streamlit como qualquer outro pacote Python.

Configurando o Streamlit-Authenticator

Depois de instalar o Streamlit-Authenticator, o próximo passo é configurá-lo. Isso envolve configurar o Streamlit-Authenticator para funcionar com o aplicativo Streamlit específico. Aqui está um guia passo a passo sobre como fazer isso:

  1. Importe o Streamlit-Authenticator em seu aplicativo Streamlit:
import streamlit_authenticator as sa
  1. Inicialize o Streamlit-Authenticator com as configurações específicas do seu aplicativo:
auth = sa.Authenticator(
    CHAVE_SECRETA,
    token_url="/token",
    token_ttl=3600,
    password_hashing_method=sa.PasswordHashingMethod.BCRYPT,
)
  1. Use o decorador auth.login_required para proteger as rotas do seu Streamlit:
@auth.login_required
def protegido():
    st.write("Esta é uma rota protegida.")

Implementando Autenticação de Usuário no Streamlit com o Streamlit-Authenticator

Agora que você instalou e configurou o Streamlit-Authenticator, é hora de adicionar um serviço de autenticação de usuário ao seu aplicativo Streamlit. Isso envolve a criação de formulários de login e registro, o gerenciamento de sessões de usuários e muito mais.

Adicionando Serviço de Autenticação de Usuário no Streamlit

Para adicionar um serviço de autenticação de usuário no Streamlit, você precisa criar um formulário de login onde os usuários possam inserir suas credenciais. Aqui está um exemplo de como você pode fazer isso usando o Streamlit-Authenticator:

@st.route("/login")
def login():
    username = st.text_input("Nome de Usuário")
    password = st.text_input("Senha", type="password")
 
    if st.button("Login"):
        user = auth.authenticate(username, password)
        if user is not None:
            auth.login_user(user)
            st.success("Login realizado com sucesso.")
        else:
            st.error("Nome de usuário ou senha inválidos.")

Implementando Autenticação de Usuário sem SSO

Se você não pode implementar o login único (SSO), não se preocupe. O Streamlit-Authenticator permite adicionar autenticação básica ao seu aplicativo Streamlit sem SSO. Isso envolve a criação de uma senha global compartilhada entre todos os usuários. Veja como você pode fazer isso:

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

Em seguida, em seu aplicativo Streamlit, você pode verificar a senha digitada em relação à senha armazenada:

password = st.text_input("Senha", type="password")
 
if password == st.secrets["password"]:
    st.success("Acesso concedido.")
else:
    st.error("Acesso negado.")

Entendendo a Gestão de Segredos do Streamlit

A funcionalidade de gerenciamento de segredos do Streamlit desempenha um papel crucial na autenticação do usuário. Isso permite que você armazene informações sensíveis, como senhas e chaves de API, de forma segura, fora do seu código. Isso é essencial para manter a segurança do seu aplicativo Streamlit e a privacidade dos seus usuários.

Peço desculpas pela confusão anterior. Vamos mergulhar mais fundo em cada seção com mais detalhes, exemplos e fatos.

Recursos avançados do Streamlit-Authenticator

O Streamlit-Authenticator não se trata apenas da autenticação básica do usuário. Ele vem com vários recursos avançados que oferecem uma solução abrangente para o gerenciamento de usuários em seus aplicativos Streamlit. Esses recursos incluem widgets para redefinição de senha, registro de novos usuários e tratamento de cenários de senha e nome de usuário esquecidos. Vamos explorar cada um desses recursos em detalhes.

Criando um widget de redefinição de senha

Um dos recursos-chave do Streamlit-Authenticator é a capacidade de criar um widget de redefinição de senha. Este é um recurso essencial para qualquer aplicativo que lida com autenticação de usuários. Aqui está um guia passo a passo sobre como você pode criar um widget de redefinição de senha usando o Streamlit-Authenticator:

  1. Primeiro, crie uma nova rota em seu aplicativo Streamlit para o formulário de redefinição de senha:
@st.route("/redefinir-senha")
def redefinir_senha():
    ...
  1. Dentro desta rota, crie um formulário onde os usuários possam inserir seu endereço de e-mail:
email = st.text_input("Digite seu endereço de e-mail")
if st.button("Redefinir Senha"):
    ...
  1. Quando o usuário enviar o formulário, use o Streamlit-Authenticator para gerar um link de redefinição de senha:
link_redefinicao = auth.gerar_link_redefinicao_senha(email)
  1. Por fim, envie este link para o endereço de e-mail do usuário. Você pode usar qualquer biblioteca de e-mail em Python, como smtplib ou yagmail, para enviar o e-mail.

Criando um widget de registro de novo usuário

O Streamlit-Authenticator facilita a adição de um widget de registro de novo usuário ao seu aplicativo Streamlit. Este widget permite que novos usuários criem uma conta fornecendo seu nome de usuário desejado e senha. Veja como você pode criar um widget de registro de novo usuário usando o Streamlit-Authenticator:

  1. Crie uma nova rota em seu aplicativo Streamlit para o formulário de registro:
@st.route("/registrar")
def registrar():
    ...
  1. Dentro desta rota, crie um formulário onde os usuários possam inserir seu nome de usuário desejado e senha:
nome_usuario = st.text_input("Escolha um nome de usuário")
senha = st.text_input("Escolha uma senha", type="password")
if st.button("Registrar"):
    ...
  1. Quando o usuário enviar o formulário, use o Streamlit-Authenticator para criar uma nova conta de usuário com as credenciais inseridas:
usuario = auth.criar_usuario(nome_usuario, senha)
st.success("Conta criada com sucesso.")

Criando um widget de senha esquecida

Se um usuário esquecer sua senha, um widget de senha esquecida pode ser muito útil. Este widget permite que os usuários redefinam sua senha fornecendo seu endereço de e-mail. Veja como você pode criar um widget de senha esquecida usando o Streamlit-Authenticator:

  1. Crie uma nova rota em seu aplicativo Streamlit para o formulário de senha esquecida:
@st.route("/esqueci-senha")
def esqueci_senha():
    ...
  1. Dentro desta rota, crie um formulário onde os usuários possam inserir seu endereço de e-mail:
email = st.text_input("Digite seu endereço de e-mail")
if st.button("Redefinir Senha"):
    ...
  1. Quando o usuário enviar o formulário, use o Streamlit-Authenticator para gerar um link de redefinição de senha e enviá-lo para o endereço de e-mail do usuário.

Criando um widget de nome de usuário esquecido

Assim como o widget de senha esquecida, um widget de nome de usuário esquecido também pode ser útil para usuários que esqueceram seus nomes de usuário. Este widget permite que os usuários recuperem seu nome de usuário fornecendo seu endereço de e-mail. Veja como você pode criar um widget de nome de usuário esquecido usando o Streamlit-Authenticator:

  1. Crie uma nova rota em seu aplicativo Streamlit para o formulário de nome de usuário esquecido:
@st.route("/esqueci-nome-usuario")
def esqueci_nome_usuario():
    ...
  1. Dentro desta rota, crie um formulário onde os usuários possam inserir seu endereço de e-mail:
email = st.text_input("Digite seu endereço de e-mail")
if st.button("Recuperar Nome de Usuário"):
    ...
  1. Quando o usuário enviar o formulário, use o Streamlit-Authenticator para recuperar o nome de usuário do usuário e enviá-lo para o endereço de e-mail do usuário.
nome_usuario = auth.get_username(email)
st.success(f"Seu nome de usuário é {nome_usuario}.")

Esses recursos avançados do Streamlit-Authenticator tornam-no uma solução abrangente para autenticação de usuário em aplicativos Streamlit. Ao usar esses recursos, você pode garantir que seu aplicativo seja não apenas seguro, mas também amigável para o usuário.

Streamlit-Authenticator: Além da autenticação básica

Embora o Streamlit-Authenticator forneça uma solução robusta para autenticação de usuário, ele também oferece uma variedade de recursos adicionais que podem aprimorar a experiência do usuário e agilizar o gerenciamento de usuários. Esses recursos, como funções e permissões de usuário, autenticação de vários fatores e integração com provedores de autenticação de terceiros, podem adicionar uma camada extra de segurança e flexibilidade aos seus aplicativos Streamlit.

  • Funções e permissões de usuário: O Streamlit-Authenticator oferece suporte a funções e permissões de usuário, permitindo controlar o que cada usuário pode ou não fazer em seu aplicativo. Por exemplo, você pode criar funções para administradores, editores e visualizadores, cada um com diferentes permissões. Isso pode ser particularmente útil para aplicativos que têm diferentes tipos de usuários com diferentes necessidades e responsabilidades.

  • Autenticação de vários fatores: Para maior segurança, o Streamlit-Authenticator oferece suporte à autenticação de vários fatores (MFA). Com o MFA, os usuários devem fornecer duas ou mais informações (ou fatores) para se autenticar. Esses fatores podem incluir algo que eles sabem (como uma senha), algo que eles têm (como um token físico ou um smartphone) ou algo que eles são (como uma impressão digital ou outros dados biométricos).

  • Integração com Provedores de Autenticação de Terceiros: O Streamlit-Authenticator também pode ser integrado a provedores de autenticação de terceiros, como Google, Facebook e Twitter. Isso permite que os usuários façam login no seu aplicativo usando suas contas existentes nessas plataformas, tornando o processo de login mais rápido e conveniente.

Conclusão

O Streamlit-Authenticator oferece uma solução abrangente para autenticação de usuários em aplicativos Streamlit. Desde recursos básicos de autenticação, como login e registro, até recursos avançados, como redefinição de senha, funções e permissões de usuário, autenticação de vários fatores e integração com provedores de terceiros, o Streamlit-Authenticator tem tudo o que você precisa para proteger seu aplicativo e oferecer uma experiência de usuário suave.

No entanto, vale ressaltar que, embora o Streamlit-Authenticator seja uma ferramenta poderosa, ele não está isento de desvantagens. Por exemplo, pode não ser adequado para aplicativos que requerem um alto nível de segurança, como aplicativos bancários ou de saúde. Além disso, embora seja relativamente fácil de configurar, ele requer algum conhecimento de Python e desenvolvimento web.

Apesar dessas possíveis desvantagens, o Streamlit-Authenticator continua sendo uma escolha popular para autenticação de usuários em aplicativos Streamlit devido à sua facilidade de uso, flexibilidade e conjunto robusto de recursos.

Você já ouviu falar dessa incrível ferramenta de Análise de Dados e Visualização de Dados, que transforma seu aplicativo Streamlit em um Tableau?

PyGWalker (opens in a new tab) é uma biblioteca Python que ajuda você a incorporar facilmente uma interface semelhante ao Tableau em seu próprio aplicativo Streamlit sem esforço.

PyGWalker para visualização de dados no Streamlit (opens in a new tab)

Perguntas Frequentes

P: Como faço para autenticar o Streamlit?

R: Você pode autenticar o Streamlit usando o Streamlit-Authenticator, um módulo de autenticação seguro que permite validar as credenciais do usuário em seu aplicativo Streamlit. Ele oferece recursos como redefinição de senha, registro de novo usuário e widgets para senha esquecida e nome de usuário.

P: Como adiciono autenticação do usuário ao Streamlit?

R: Você pode adicionar autenticação do usuário ao Streamlit instalando e configurando o Streamlit-Authenticator. Uma vez configurado, você pode usá-lo para criar formulários de login e registro, lidar com sessões de usuário e muito mais.

P: O que é o autenticador do Streamlit?

R: O Streamlit-Authenticator é um módulo de autenticação seguro para aplicativos Streamlit. Ele permite validar as credenciais do usuário, gerenciar sessões de usuário e oferecer recursos como redefinição de senha, registro de novo usuário e widgets para senha esquecida e nome de usuário.

P: Quais são as desvantagens do Streamlit?

R: Embora o Streamlit seja uma ferramenta poderosa para criar aplicativos de dados, ele possui algumas desvantagens. Por exemplo, pode não ser adequado para aplicativos que requerem um alto nível de segurança, como aplicativos bancários ou de saúde. Além disso, embora seja relativamente fácil de configurar, ele requer algum conhecimento de Python e desenvolvimento web.