Streamlit Authenticator: adicione autenticação aos seus aplicativos Streamlit

Saiba como implementar sistemas de login e gerenciamento de usuários em suas aplicações com o Streamlit-Authenticator

Adicionar autenticação aos seus aplicativos Streamlit nunca foi tão simples! Com o Streamlit Authenticator, você pode implementar um sistema de login seguro e gerenciamento de usuários de maneira rápida e eficaz. Esse pacote oferece configuração prática e funcionalidades poderosas, como o hashing de senhas e o controle de acesso, permitindo que seus aplicativos sejam interativos e protegidos.

Neste post, você verá um passo a passo sobre como integrar o Streamlit Authenticator ao seu projeto, garantindo que apenas usuários autorizados possam acessar funcionalidades e dados sensíveis. Aprenda sobre a criação de um arquivo de configuração em YAML, a personalização de formulários de login e muito mais!

O que é o Streamlit Authenticator

O Streamlit Authenticator é um pacote projetado para adicionar recursos de autenticação a aplicativos desenvolvidos com o Streamlit. Ele fornece uma maneira eficiente para que os desenvolvedores implementem sistemas de autenticação robustos e seguros, permitindo o controle de acesso baseado em diferentes níveis de privilégio. Esse módulo é particularmente útil para aplicativos corporativos ou aqueles que requerem um controle mais rigoroso sobre quem pode acessar certas funcionalidades e dados.

Ao permitir o controle de acesso a funcionalidades e dados sensíveis, o Streamlit Authenticator aumenta consideravelmente a segurança dos projetos

Como usar o Streamlit Authenticator para autenticação

A implementação do Streamlit Authenticator envolve algumas etapas:

1. Instalação

Instale a biblioteca Streamlit-Authenticator via pip:

pip install streamlit-authenticator

2. Hashing de Senhas

Crie um arquivo de configuração YAML que contenha as credenciais dos usuários, incluindo nomes de usuário e senhas em texto puro. Utilize o módulo Hasher para converter as senhas em texto puro em senhas hashed.

Exemplo de config.yaml:

credentials:
  usernames:
    jsmith:
      email: [email protected]
      name: John Smith
      password: abc  # Para ser substituído pela senha hashed
    rbriggs:
      email: [email protected]
      name: Rebecca Briggs
      password: def  # Para ser substituído pela senha hashed
cookie:
  expiry_days: 30
  key: some_signature_key  # Deve ser uma string
  name: some_cookie_name
preauthorized:
  emails:
    - [email protected]

Use o Hasher para gerar as senhas hashed:

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

3. Criando um Widget de Login

Importe o arquivo de configuração e crie um objeto de autenticação:

import yaml
from yaml.loader import SafeLoader

with open('config.yaml') as file:
    config = yaml.load(file, Loader=SafeLoader)

authenticator = stauth.Authenticate(
    config['credentials'],
    config['cookie']['name'],
    config['cookie']['key'],
    config['cookie']['expiry_days'],
    config['preauthorized']
)

Renderize o módulo de login:

name, authentication_status, username = authenticator.login('Login', 'main')

4. Autenticando Usuários

Use o nome e o status de autenticação retornados para permitir que usuários verificados acessem conteúdo restrito.

5. Outras Funcionalidades

Adicione funcionalidades como resetar a senha, registrar novos usuários, gerar senhas aleatórias e atualizar detalhes do usuário, conforme necessário, utilizando os métodos apropriados do authenticator.

6. Atualização do Arquivo de Configuração

Sempre que um usuário atualizar suas credenciais ou ao usar funcionalidades como resetar senha ou registrar um novo usuário, lembre-se de salvar as alterações no arquivo de configuração:

with open('config.yaml', 'w') as file:
    yaml.dump(config, file, default_flow_style=False)

Benefícios da autenticação em aplicativos Streamlit

A autenticação em aplicativos Streamlit traz uma série de vantagens significativas que podem melhorar a segurança e a experiência do usuário. Aqui estão alguns dos principais benefícios:

1. Segurança

A autenticação é fundamental para validar as credenciais dos usuários, garantindo que apenas usuários autorizados possam acessar o aplicativo e protegendo dados sensíveis.

2. Controle de Acesso

Com um sistema de autenticação, é possível implementar diferentes níveis de acesso, assegurando que apenas determinados usuários possam realizar ações específicas, fundamental em ambientes corporativos.

3. Recursos Adicionais

Módulos de autenticação oferecem funcionalidades extras como:

  • Redefinição de senha: Permitem que os usuários recuperem o acesso às suas contas no caso de esquecerem suas senhas.

  • Registro de novos usuários: Facilita a criação de contas, proporcionando uma experiência mais fluida.

  • Recuperação de senha e nome de usuário: Ajuda os usuários a recuperarem suas credenciais em caso de esquecimento.

4. Armazenamento Seguro de Senhas

A autenticação pode empregar métodos de criptografia para garantir que as senhas dos usuários sejam armazenadas de forma segura, minimizando riscos de segurança.

5. Facilidade de Integração

Ferramentas como o Streamlit-Authenticator permitem uma simples integração com provedores de autenticação de terceiros, melhorando a experiência geral.

O Streamlit Authenticator permite inclusive incluir funcionalidades avançadas no processo de login

Erros comuns no Streamlit Authenticator

Ao utilizar o Streamlit Authenticator, é importante estar ciente de alguns erros comuns que podem surgir:

1. TypeError: múltiplos valores para o argumento 'cookie_expiry_days'

Esse erro ocorre quando a instância do autenticador é criada e há confusão sobre os argumentos passados. Verifique a documentação atualizada.

2. KeyError: 'st.session_state has no key "authentication_status"'

Este erro acontece se a chave 'authentication_status' não foi inicializada corretamente no st.session_state. Garanta que todas as condições de inicialização sejam atendidas.

3. List indices must be integers or slices, not str

Esse erro surge quando o código tenta acessar índices de uma lista usando uma string. Verifique a forma como dicionários ou listas são acessados.

4. Alterações na estrutura de dados

O Streamlit Authenticator agora requer que um dicionário seja fornecido como parte da configuração, em vez de listas simples. Esteja ciente dessa mudança ao ajustar o código.

Como integrar o Streamlit Authenticator em seu projeto

1. Instalação

O primeiro passo é instalar o pacote Streamlit-Authenticator. Execute o seguinte comando:

pip install streamlit-authenticator

2. Importação

Após a instalação, importe o módulo em seu código Python:

import streamlit_authenticator as stauth

3. Configuração de credenciais

Crie um arquivo YAML para armazenar as credenciais dos usuários:

credentials:
  usernames:
    jsmith:
      email: [email protected]
      name: John Smith
      password: abc # Substituir pela senha criptografada
    rbriggs:
      email: [email protected]
      name: Rebecca Briggs
      password: def # Substituir pela senha criptografada
cookie:
  expiry_days: 30
  key: random_signature_key # Deve ser uma string
  name: random_cookie_name
preauthorized:
  emails:
    - [email protected]

4. Criptografia das senhas

As senhas devem ser armazenadas de forma segura. Utilize o módulo Hasher:

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

Substitua as senhas em texto simples no arquivo YAML pelas criptografadas.

5. Criação do widget de login

Importe o arquivo YAML no seu script:

import yaml
from yaml.loader import SafeLoader

with open('config.yaml') as file:
    config = yaml.load(file, Loader=SafeLoader)

Crie o objeto do autenticador:

authenticator = stauth.Authenticate(
    config['credentials'],
    config['cookie']['name'],
    config['cookie']['key'],
    config['cookie']['expiry_days'],
    config['preauthorized']
)

Renderize o widget de login:

name, authentication_status, username = authenticator.login('Login', 'main')

6. Verificação do status de autenticação

Depois de configurado, use os valores retornados para personalizar a experiência do usuário com base nas credenciais e verificar se a autenticação foi bem-sucedida.

Vale a pena usar o Streamlit Authenticator?

Implementar autenticação em seus aplicativos Streamlit com o Streamlit Authenticator simplifica a criação de sistemas de login robustos e seguros. No decorrer deste post, você aprendeu a instalar a biblioteca e entendeu como criar arquivos de configuração em YAML, realizar o hashing de senhas e renderizar um widget de login, sempre mantendo a segurança e a integridade dos dados dos usuários.

Além disso, discutimos os benefícios dessa autenticação, como o controle de acesso e algumas funcionalidades adicionais, que não apenas melhoram a segurança, mas também proporcionam uma experiência de usuário mais fluida. Agora que você tem as ferramentas para implementar essa funcionalidade essencial, está preparado para criar aplicativos mais seguros e eficientes.