1
resposta

TOKEN É OBRIGATORIO?

Olá, pessoal! Tenho uma dúvida sobre o uso de token na autenticação de APIs. Sei que a autenticação é importante para evitar bloqueios e garantir a segurança nas consultas ao servidor. No entanto, queria saber se o uso do token é realmente obrigatório em todos os casos.

Eu criei um código sem utilizar o token para facilitar a divulgação e verifiquei que ele funcionou normalmente na paginação das páginas. Alguém pode me explicar se existem cenários onde o uso do token não seria necessário ou se ele é sempre uma prática recomendada, mesmo quando o código parece rodar sem problemas?

import requests

def consultar_seguidores(owner):
    url = f"https://api.github.com/users/{owner}/followers"
    repos_list = []
    page_num = 1

    while True:
        try:
            url_page = f'{url}?page={page_num}'
            response = requests.get(url_page)
            
            if response.status_code != 200:
                print(f"Erro na requisição: {response.status_code}")
                break

            seguidores = response.json()
            
            if not seguidores:
                break
            
            repos_list.extend(seguidores)
            
            page_num += 1

        except Exception as e:
            print(f"Ocorreu um erro: {e}")
            break
    
    return repos_list


resposta_positivas = ["YES", "SIM", "Y", "S"]
pesquisa = 1

while True:
    owner = input("Qual o usuário que deseja consultar os seguidores? ")

    seguidores = consultar_seguidores(owner)

    print(f"Total de seguidores encontrados: {len(seguidores)}")

    resposta = input("Deseja realizar uma nova pesquisa? ").upper()

    if resposta not in resposta_positivas:
        print(f"Foi um prazer te ajudar! Você realizou {pesquisa} pesquisa(s).")
        break
    else:
        pesquisa += 1

Agradeço desde já pela ajuda!

1 resposta

Tokens não são sobre "fazer funcionar" "mesmo quando o código parece rodar sem problemas", tokens não estão ligados á fazer sua API funcionar, tokens são para garantir a segurança da autenticação e autorização da API, é sobre controle de acesso, você pode perfeitamente criar uma API funcionando 100% e sem tokens, porém certamente estará desprotegida, por isso essa prática é sempre recomendada...

Existe uma vulnerabilidade chamada Broken Authenticator, ela é TOP 2 maiores vulnerabilidades em aplicações WEB, e uma das formas de se prevenir á esse ataque é ter uma boa gestão de autenticação/autorização do usuário na aplicação

Se existem cenários onde o uso do token não seria necessário, bom, existem outras formas de proteger aplicações sem uso de tokens, utilizando sessions por exemplo, as sessions são salvas no servidor

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

E essa é justamente a desvantagem em se utilizar session, como elas são salvas no servidor, em uma arquitetura distribuída as sessions podem produzir uma inconsistencia no login do usuário, porque imagina que você se logou no servidor 1, e a próxima request cai no servidor 2, vai pedir pra você se logar de novo...

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Há uma forma de contornar esse problema: Seria armazenar as sessions todas em um servidor externo, e todos os outros servidores batem nesse servidor para fazer autentitação e autorização do acesso do usuário, essa abordagem também trás uma desvantagem porque será +1 servidor para gerenciar na sua infraestrutura

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Em ambientes de sistemas distribuídos esses problemas não acontecem, pois qualquer microservice que receber o token, vai conseguir validar se está expirado ou não, vai conseguir validar se é um token válido, não tem sessão gravada no servidor, os microservices geram um token JWT, e cada request precisa desse token, que será validado em toda request

Insira aqui a descrição dessa imagem para ajudar na acessibilidade