Streamlit Authenticator: adicione autenticação às suas aplicações Streamlit

Aprenda a implementar sistemas de login e autenticação em seus apps Streamlit usando a biblioteca Streamlit-Authenticator.

Para quem deseja fortalecer a segurança de suas aplicações Streamlit, o Streamlit Authenticator é a solução ideal. Esta biblioteca possui recursos que facilitam a implementação de sistemas de login e autenticação, permitindo que apenas usuários autorizados tenham acesso a certas funcionalidades do app.

Neste post, exploraremos como configurar o Streamlit Authenticator, desde a instalação do pacote até a criação de credenciais, além de abordar a gestão de privilégios de usuário e as vantagens dessa abordagem para o desenvolvimento de aplicações mais seguras e personalizadas.

O que é o Streamlit Authenticator?

O Streamlit Authenticator é um pacote projetado para adicionar recursos de autenticação a aplicativos desenvolvidos com Streamlit. Ele permite que os desenvolvedores implementem um sistema de login para usuários, oferecendo diferentes níveis de privilégio e segurança conforme as necessidades de cada aplicação.

Com funcionalidades como a criação de formulários de login e o hash de senhas, o Streamlit Authenticator facilita a implementação de um sistema onde apenas usuários autorizados podem acessar partes específicas do aplicativo. Além disso, possibilita a gestão de privilégios de usuários, permitindo acessos distintos de acordo com as permissões estabelecidas.

Origem do Streamlit Authenticator

A ideia de desenvolver o Streamlit Authenticator surgiu a partir da demanda de um cliente por funcionalidades robustas de autenticação e controle de acesso em um projeto específico. Posteriormente, ele se tornou uma solução para tornar aplicativos Streamlit mais seguros, atendendo a necessidades corporativas e outras aplicações que requerem controle rigoroso sobre quem pode acessar o que.

O Streamlit Authenticator permite maior segurança no acesso ao Streamlit

Como funciona o Streamlit Authenticator?

O Streamlit Authenticator tem se mostrado um componente essencial para autenticação segura de usuários. Abaixo estão os principais passos para operá-lo:

  1. Instalação: Instale o pacote usando o comando pip install streamlit-authenticator e importe-o no seu script Python.

  2. Criação de Credenciais: Defina as credenciais dos usuários (nomes de usuário, e-mails e senhas) em um arquivo YAML, assegurando que as senhas sejam armazenadas de maneira segura, utilizando hashing.

  3. Hash de Senhas: O pacote fornece um módulo (Hasher) para converter senhas feitas com texto simples em senhas hash, que serão armazenadas no arquivo YAML.

  4. Criação do Widget de Login: Com um objeto autenticador, configure o widget de login. A autenticação dos usuários é gerida através deste widget, onde o status da autenticação e o nome do usuário são retornados.

  5. Autenticação de Usuários: Após a criação do widget, o sistema verifica as credenciais fornecidas e autentica o acesso, exibindo mensagens apropriadas conforme o status da autenticação.

  6. Implementação de Privilégios de Usuário: Com base no nome do usuário autenticado, redirecione os usuários para diferentes seções da aplicação, proporcionando uma experiência personalizada.

Esse processo não apenas implementa a autenticação, mas também permite gerenciar diferentes níveis de privilégio conforme for necessário.

Como implementar autenticação no Streamlit?

Implementar autenticação nas aplicações Streamlit é um passo essencial para garantir a segurança e o controle de acesso. A biblioteca Streamlit-Authenticator torna esse processo mais simples. Aqui estão os passos para implementação:

  1. Instalação do Streamlit-Authenticator: Instale o pacote com:

    pip install streamlit-authenticator
    
  2. Importação do Componente: No seu script Python, importe o componente:

    import streamlit_authenticator as stauth
    
  3. Criação do Arquivo YAML para Credenciais: Defina as credenciais dos usuários e configurações de cookies em um arquivo YAML. Exemplo:

    credentials:
      usernames:
        jsmith:
          email: [email protected]
          name: John Smith
          password: abc # Substitua pela senha hash
        rbriggs:
          email: [email protected]
          name: Rebecca Briggs
          password: def # Substitua pela senha hash
    cookie:
      expiry_days: 30
      key: random_signature_key # Deve ser uma string
      name: random_cookie_name
    preauthorized:
      emails:
      - [email protected]
    
  4. Hash das Senhas: Use o módulo Hasher para gerar senhas hash:

    hashed_passwords = stauth.Hasher(['abc', 'def']).generate()
    

    Lembre-se de substituir as senhas elaboradas com texto puro no arquivo YAML.

  5. Importação do Arquivo YAML: Importe o arquivo no seu script:

    import yaml
    from yaml.loader import SafeLoader
    with open('../config.yaml') as file:
        config = yaml.load(file, Loader=SafeLoader)
    
  6. Criação do Objeto Autenticador: Crie um objeto autenticador usando as configurações do YAML:

    authenticator = stauth.Authenticate(
        config['credentials'],
        config['cookie']['name'],
        config['cookie']['key'],
        config['cookie']['expiry_days'],
        config['preauthorized']
    )
    
  7. Renderização do Widget de Login: Renderize o widget e capture os valores de autenticação:

    name, authentication_status, username = authenticator.login('Login', 'main')
    
  8. Lógica de Autenticação: Implemente a lógica para gerenciar diferentes estados de autenticação:

    if authentication_status:
        authenticator.logout('Logout', 'main')
        st.write(f'Bem-vindo *{name}*')
    elif authentication_status == False:
        st.error('Usuário/senha está incorreto')
    elif authentication_status == None:
        st.warning('Por favor, insira seu usuário e senha')
    
  9. Implementação de Privilégios do Usuário: Personalize a experiência do usuário com base no nome do usuário autenticado:

    if username == 'jsmith':
        st.title('Aplicação 1')
    elif username == 'rbriggs':
        st.title('Aplicação 2')
    

Quais as Vantagens do Streamlit Authenticator?

As vantagens do Streamlit Authenticator são diversas e fazem desta biblioteca uma escolha ideal para os desenvolvedores que desejam implementar autenticação. Confira alguns benefícios:

  1. Autenticação Segura: Valida credenciais de usuários, garantindo que apenas usuários autorizados tenham acesso.

  2. Gestão de Níveis de Privilégio: Oferece suporte para diferentes níveis de privilégio dos usuários, permitindo personalizar a experiência de acesso.

  3. Facilidade de Implementação: Instalação e configuração simples, economizando tempo e esforço no desenvolvimento.

  4. Hashing de Senhas: Utiliza técnicas de hashing de senhas, aumentando a segurança ao armazenar credenciais.

  5. Experiência do Usuário: Proporciona uma experiência de login amigável, com feedback claro em caso de erros de autenticação.

  6. Flexibilidade na Configuração: Permite definir listas pré-autorizadas e outros parâmetros de configuração para atender a requisitos específicos.

  7. Gerenciamento de Sessões: Mantém os usuários logados por um período definido, melhorando a experiência geral.

Com o Streamlit Authenticator, é possível limitar o acesso a algumas funcionalidades a certos usuários

Como Garantir a Segurança na Sua Aplicação Streamlit?

Para garantir a segurança na sua aplicação Streamlit, siga estas práticas recomendadas:

  1. Autenticação: Utilize autenticação através do GitHub para implantar ou administrar sua aplicação.

  2. Gerenciamento de Permissões: Verifique se as permissões atribuídas no GitHub estão adequadas.

  3. Infraestrutura Segura: Streamlit utiliza data centers seguros monitorados para garantir conformidade.

  4. Exclusão de Dados: Tenha a opção de excluir aplicações e contas conforme for necessário.

  5. Segurança de Rede e Aplicação: Utilize uma nuvem privada virtual (VPC) com controle de acesso via firewalls.

  6. Criptografia: Todas as aplicações são servidas através de HTTPS, com criptografia forte.

  7. Gerenciamento de Vulnerabilidades: Mantenha sistemas atualizados e monitore vulnerabilidades.

  8. Resposta a Incidentes: Siga protocolos internos para detectar e responder a eventos de segurança.

Essas práticas ajudam a criar uma aplicação mais segura no Streamlit e a proteger os dados dos usuários.

Vale a pena utilizar o Streamlit Authenticator?

Vale a pena considerar a implementação de autenticação em suas aplicações Streamlit com o Streamlit Authenticator. Com recursos que facilitam a gestão de usuários e seus privilégios, essa biblioteca não só fortalece a segurança da sua aplicação, mas também melhora a experiência do usuário ao garantir um acesso controlado e personalizado.

Com as diretrizes e passos detalhados neste post, você está preparado para adicionar uma camada extra de proteção às suas aplicações. Agora, é hora de colocar em prática e aproveitar os benefícios que um sistema de autenticação pode proporcionar.