4 pontos por GN⁺ 2024-01-01 | 1 comentários | Compartilhar no WhatsApp
  • Ao criar um ID interno de conta para uso de longo prazo em um sistema, usar o endereço de e-mail como ID permanente só porque o OIDC o retorna faz com que você assuma, ao mesmo tempo, os problemas de mudança e de reutilização
  • Mesmo dentro de uma organização, um endereço de e-mail pode mudar, assim como o nome ou o login, então ele não é estável o bastante para servir como valor de referência da conta
  • Mesmo que o acesso ou encaminhamento para o endereço antigo continue existindo, isso não garante que ele seguirá funcionando em usos não relacionados a e-mail, como autenticação via OIDC
  • O endereço de e-mail pode ser necessário para recuperação de conta, mas se o sistema de autenticação fornecer um ID separado, único e permanente, esse é o valor que deve ser usado como ID interno
  • Mesmo que seja um valor invisível para o usuário, é melhor que o identificador interno da conta seja um ID sem significado, o que simplifica a operação de longo prazo e a segurança

Por que dá vontade de usar endereços de e-mail como ID permanente

Um endereço que pode mudar dificilmente serve como valor de referência

  • O maior problema é que o endereço de e-mail pode mudar
    • Mesmo dentro de uma organização, o endereço de e-mail de uma pessoa pode ser alterado
    • Isso pode acontecer pelos mesmos tipos de motivo pelos quais mudam o nome usado no dia a dia ou o login
    • Recusar mudanças ou reemissões de endereços de e-mail atribuídos pela organização pode ser severo a ponto de, em muitos lugares, ser difícil de sustentar legalmente ao longo do tempo
  • Mesmo que o endereço antigo não desapareça por completo, ele ainda é insuficiente como identificador permanente
    • Pode continuar existindo acesso ao endereço antigo ou encaminhamento dele
    • Ainda assim, o endereço antigo pode não continuar funcionando para usos não relacionados a e-mail, como autenticação via OIDC
    • O usuário vai querer usar o endereço novo e atual, em vez do antigo, que pode ser inconveniente

Reutilização e e-mail de recuperação devem ser tratados separadamente

  • Um problema menor é que não há garantia de que a organização não reutilize endereços de e-mail
    • Em geral, eles podem ser reutilizados
    • Em especial, endereços muito desejados podem ser reutilizados ou reatribuídos como exceção porque alguma pessoa influente os quer
  • Se a recuperação de conta precisar acontecer por meio de um endereço de e-mail registrado, talvez seja necessário armazenar esse e-mail
    • Mas, se houver um ID interno teoricamente único e permanente, como no OIDC, então é esse ID interno que deve ser usado
  • Mesmo que seja necessário armazenar um e-mail para recuperação de conta, o identificador interno da conta deve ser um ID sem significado
    • Mesmo que esse valor não seja exposto ao usuário, a operação de longo prazo fica mais simples
  • Dar significado demais ao endereço de e-mail também pode esconder problemas de segurança

1 comentários

 
GN⁺ 2024-01-01
Comentários do Hacker News
  • Não existe um bom identificador de identidade
    E-mails mudam, e às vezes você perde o acesso ao e-mail antigo
    Muita gente também não gosta de nome de usuário, então prefere escolher um nome não único em vez de um nome único sem sentido como user53267
    Dispositivos também se perdem, então guardar um UUID secreto em um cookie ou usar passkeys do dispositivo por si só não resolve
    Não existe solução ideal; é preciso misturar vários métodos. Para algumas pessoas, o e-mail é estável por muito tempo e funciona bem como identificador de identidade, mas para outras o nome de usuário é mais estável, então elas preferem isso. Ainda assim, quase nunca vi alguém usar o mesmo dispositivo principal por mais do que alguns anos, quanto mais por décadas, então identificação baseada em dispositivo provavelmente não vai funcionar muito bem
    Isso aparece com frequência especialmente em e-mails corporativos como first.last@company.com. Muitos softwares de fornecedores usam Sign in with Google e salvam esse endereço de e-mail como identificador dentro do app do fornecedor
    Nomes mudam por casamento, divórcio, transição, mudança de contexto cultural, escolha de um novo nome etc., e os endereços de e-mail também mudam
    Talvez coisas como OIDC precisem de novas extensões, como uma API padrão para mudança de nome de usuário e outra API padrão para mudança de endereço de e-mail

    • O e-mail acessível mais antigo que tenho tem mais de 20 anos. Não uso mais, mas ele já dura mais do que qualquer número de telefone ou endereço físico que tive até hoje
      Tirando identificadores públicos como documento oficial ou número de seguridade social, parece difícil fazer melhor do que isso
    • As pessoas também deveriam ter o direito de perder tudo e começar uma vida nova. Isso era algo realmente possível até poucas décadas atrás
    • OIDC já trata desse problema ao exigir que a claim sub seja única e não seja reatribuída: https://openid.net/specs/openid-connect-core-1_0.html#IDToke...
      Claro, isso significa que você não deve colocar um endereço de e-mail no sub do token de ID
    • Um dos casos de mudança de e-mail de que eu mais “gosto” é um problema criado pela própria empresa, como mudança de sufixo de contratado
      Já passei por empresa em que, ao ser efetivado, você precisava criar uma conta completamente nova, e como não havia um sistema de permissões simples e unificado, levei umas 3 semanas para recuperar, após a transição, o acesso aos sistemas que eu usava até o dia anterior
      O mais engraçado é que essa empresa fazia muito negócio fornecendo aos clientes estruturas complexas de contas e até tinha um sistema de identidade externo que tratava esse tipo de problema com facilidade. Só não aplicava isso aos funcionários internos que mantinham esse sistema de identidade externo
    • Eu gostava do jeito antigo do Discord, em que e-mail e nome de exibição ficavam separados
      Todo mundo tinha números anexados, então os números não significavam muito. Fiquei um pouco decepcionado quando isso virou um ID de conta único, e até hoje me pergunto por que mudaram
  • Como pessoa física, qual seria a melhor forma de lidar com esse problema?
    O Gmail pode ser bloqueado de repente ou ter a conta banida por causa de algoritmos de IA, e não há nenhum recurso se algo der errado
    Recentemente o Yahoo me pediu, no login, para autenticar com um e-mail inativo ao qual eu não tinha acesso havia 15 anos, e acabei perdendo o acesso. Por sorte eu ainda conseguia entrar pelo cliente de e-mail e pude migrar as contas importantes
    Yahoo/AOL/Tutanota/Protonmail/e muitos outros apagam contas automaticamente se você não fizer login com frequência suficiente. O Protonmail ainda não faz isso, mas os termos permitem
    Hospedar por conta própria também não resolve do zero, porque toda a infraestrutura já exige um e-mail. Se você perder acesso a esse e-mail, pode perder alertas de pagamento e até a conta de hospedagem. Quase perdi meu domínio porque alertas de cobrança estavam indo para um e-mail que eu quase nunca verificava, já que ele não suportava IMAP. Se você não for um administrador de sistemas profissional e não tiver tempo suficiente para manutenção, o risco de invasão também fica maior
    Push do Duo acaba se o celular quebrar, e autenticação por SMS tem problemas como celular danificado, perda de acesso ao plano ou até vazamento do código por funcionários internos
    No fim, decidi usar meu endereço Gmail da universidade. Prometeram que ex-alunos poderiam mantê-lo, e se algo der errado — provavelmente perder a segunda etapa por causa da perda do celular — existe um centro de suporte a ex-alunos razoável
    Você realmente precisa ter algum canal de suporte humano com quem possa falar em algum lugar. Mesmo assim, não tenho certeza se isso é o melhor possível e ainda me pergunto se o risco do lado do Google continua existindo

    • A melhor solução que faltou mencionar é usar seu próprio domínio com um e-mail hospedado em algo como o Gmail
      Como você disse, se bloquear, você “simplesmente” troca de provedor e perde, no máximo, algumas horas de e-mails
    • E o iCloud? Em teoria uma conta também pode ser banida, mas pelo menos a Apple dá a sensação de que geralmente existe algum caminho de recurso e de que você consegue falar com uma pessoa
  • Concordo que o e-mail não é um bom identificador permanente. Dito isso, usar número de telefone como parte da identificação é ainda pior
    Usei praticamente o mesmo e-mail com meu próprio domínio por quase 20 anos, mas no mesmo período meu número de telefone mudou umas 12 vezes. Vejo com frequência sites que ainda deixaram a autenticação em duas etapas ativada para um número antigo, ou casos em que eu simplesmente esqueci que tinha cadastrado aquele número antigo no site
    Mesmo morando no exterior, ainda mantenho meu número dos EUA pagando cerca de US$ 150 por mês em impostos para a AT&T, porque ainda há sites que enviam códigos de login para ele, e porque, se eu abrir mão dele, posso perder acesso a serviços importantes cujo cadastro esqueci de atualizar ou que exigem um número americano e não me deixariam trocar

    • Se você portar o número para um provedor de VoIP como o DIDww, dá para mantê-lo por US$ 2,50 por mês, e, se quiser, também pode encaminhar os SMS recebidos para sua caixa de entrada
      Se depois quiser usar esse número novamente em uma conta de celular, basta portar de volta para a operadora que preferir
    • Não precisa pagar tanto assim para manter um número dos EUA para uso no exterior
      O ideal é trocar a autenticação em duas etapas, quando possível, por um app como o Google Authenticator, e portar o número para o Google Voice para continuar recebendo mensagens no número antigo gratuitamente
      Se você não quiser envolver o Google de jeito nenhum, também há vários outros apps de autenticação baseados em tempo, e você pode usar www.tossabledigits.com para SMS
    • Não entendo por que pagar tanto. Se portar o número para um provedor de VoIP, sai por alguns dólares por mês
      Mesmo considerando serviço normal de celular, esse valor é alto demais. Pago menos de US$ 100 por mês por duas linhas
    • Concordo com a sugestão de migrar para VoIP
      Quando me mudei anos atrás, meu número do escritório particular não era permitido na nova região, mas por sorte consegui portá-lo para uma conta de VoIP
      Na época a internet era lenta, então por um tempo usei um adaptador de telefone Ethernet e, mais tarde, passei a usar esse número só para recebimento. Chamadas de voz e fax são todos encaminhados por e-mail
      Já funciona bem há mais de 20 anos. Como não tenho nenhum aparelho conectado, o custo anual também é bem baixo
      Talvez algum dia eu conecte um telefone e aproveite a internet atual, mas gosto do jeito como está hoje e do fato de não ficar preso a um local específico
    • Mesmo trocando de operadora, você pode levar seu número de telefone junto. Com endereço de e-mail isso não acontece
  • Minha experiência é a mesma. Pessoalmente, acho que um UUID aleatório é o melhor
    Até mesmo um hash do primeiro e-mail do usuário não é o ideal. Só usar salt pode não ser suficiente, porque outras pessoas podem assumir que é seguro gerar hash de qualquer e-mail de entrada

    • Existe algum caso em que algo como uma chave natural, como aprendemos em aula de banco de dados, realmente faça sentido?
      Na prática, sempre uso inteiro autoincremental ou string aleatória/UUID como chave primária
    • A única forma de garantir que um identificador seja “permanente” é escolher algo que as pessoas não tenham absolutamente nenhum motivo para mudar
      Ele não deve ter nenhuma relação com atributos do mundo real com os quais as pessoas se importam, como número de telefone, endereço de e-mail, ID nacional estilo CPF, nome ou impressão digital
      Uma string aleatória se encaixa perfeitamente nisso. Inteiros sequenciais também servem, mas, por serem fáceis de adivinhar, podem exigir medidas extras de segurança
    • Prefiro UID sequencial a UUID, mas a ideia central continua a mesma
  • E se suportassem endereços de e-mail com chave pública? Por exemplo, tratar algo como . e algo como . como equivalentes
    Você se cadastra com um deles e depois poderia fazer login ou recuperar a conta com o outro também. Se o Google me banir ou o Hotmail acabar, eu poderia ir para outro serviço e, autenticando com a chave privada, abrir a mesma conta
    Claro que seria preciso algum processo de alias para usar nomes convenientes, mas imagino que o cliente de e-mail teria de mapear esses endereços ou ao menos rastreá-los junto com a chave pública
    Isso também poderia ser uma oportunidade para emplacar e-mail com criptografia de ponta a ponta. Quase nunca conseguiu ganhar escala de verdade
    Para funcionar na prática, os grandes provedores teriam de oferecer suporte, mas, pensando rapidamente, a ideia parece bem sólida. Tirando o fato de que ninguém dá suporte a isso ainda

    • Surpreende que ainda ninguém tenha mencionado a Decentralized Identity Foundation nesta discussão: https://identity.foundation/
      Estão surgindo novas formas de se identificar e se comunicar na web de um jeito em que a própria pessoa possui sua identidade, sem depender de provedor ou autoridade central
  • A British Gas (da Centrica), minha fornecedora de energia anterior, não permitia usar o mesmo endereço de e-mail para dois ou mais endereços físicos diferentes
    Depois que me mudei, tentei “configurar” a conta online, mas toda vez que eu via os dados do endereço atual o sistema retornava HTTP 500
    Quando liguei para perguntar, disseram que, mesmo com a conta de energia do endereço anterior já encerrada, “não é possível usar o mesmo endereço de e-mail para vários endereços postais”

    • Dá para usar o truque do +whatever. No Gmail, o truque do ponto . também funciona
    • É uma solução ruim, mas se você usa seu próprio domínio no e-mail, na prática isso deixa de ser um problema
  • No momento, estou alterando o sistema de e-mail para permitir vários endereços de e-mail vinculados a uma mesma conta
    Um dos principais motivos é que oferecemos desconto estudantil. A forma mais fácil de aplicar o desconto à conta é verificar se o e-mail pertence a uma instituição de ensino, como .edu, .ac.uk e similares
    Só que a maioria das pessoas aparentemente não quer de fato se cadastrar com esse e-mail. Permitir vários e-mails faz com que você tenha o melhor dos dois mundos
    Acho que deveríamos ter feito isso desde o início

    • Vale lembrar que, nos EUA, muita gente consegue um endereço de encaminhamento de ex-aluno .edu mesmo depois de se formar na universidade
      Tenho um bem legal. Pedi cedo e consegui um endereço só com meu nome
      Mas não uso muito. No começo, o encaminhamento às vezes era instável, embora eu imagine que hoje esteja melhor
      Na prática, meu endereço do Gmail já é estável há quase décadas e não parece que vai mudar
      De qualquer forma, passo meu endereço edu para pouquíssimas pessoas
  • Não é a solução mais elegante, mas existe uma solução do lado do cliente
    Se você pagar e mantiver seu próprio domínio, pode controlar 100% dos aliases de e-mail
    Mesmo que o Google, seu provedor atual, desapareça, você pode hospedar o e-mail por conta própria para recuperar a conta e manter a posse dos aliases

    • E se o domínio expirar?
  • Vejo isso como um problema de backend. O ID visível para o usuário pode ser o e-mail, mas a chave primária nos dados do sistema não deveria ser o e-mail
    Ainda existe lugar fazendo isso? Não usar algo como e-mail como identificador e manter uma tabela de consulta que faça o mapeamento para um ID realmente único (UUID ou valor autoincremental baseado em sequência) é o mais básico em projeto de banco de dados
    O texto não faz bem essa distinção, então dá até para ler como se o usuário tivesse que perceber essa abstração

    • Exato. Isso parece questão de prova de aula de banco de dados de ensino médio, mas surpreendentemente muitos desenvolvedores adultos não param para pensar no lado de banco de dados
  • Nada é eterno. Quase nada é estável durante toda a vida de uma pessoa
    Mesmo marcadores biométricos fáceis de escanear não são estavelmente únicos em populações grandes o bastante
    Endereços de e-mail foram escolhidos para esse tipo de uso porque são razoavelmente únicos por um período bem longo
    Números de telefone também se tornaram identificadores mais pegajosos do que antes, e agora se parecem com e-mails como identificadores úteis
    E-mail e número de telefone são ambos perdidos com frequência, e muitas vezes ao mesmo tempo
    Um endereço de e-mail de backup é a resposta
    Acho que o GitHub lida bem com identidade, mas ainda usa senhas. Senhas são ruins